R 包中的 ggplot2:CRAN 测试期间的注释
ggplot2 inside R packages: Notes during CRAN tests
我正在编写一个使用许多 ggplot2
函数的 R 程序包。问题是在 CRAN 测试期间,我有很多与 ggplot
函数相关的注释(见下文)。鉴于这种情况,为了避免来自 CRAN 的这些注释,在我的函数中使用 ggplot2
的最佳方法是什么?
我的代码示例:
s1 <- ggplot2::ggplot(result,aes(x=slope,y=..density..),
environment = environment())+
geom_histogram(fill="lightyellow",
alpha=.9,colour="grey60", size=.2) +
geom_density(size=.2) +
geom_vline(xintercept = slope.0,color="red",linetype=2,size=.7)+
xlab("Estimated slopes")+
theme(axis.text = element_text(size=14),
axis.title = element_text(size=16))
CRAN 笔记:
plot_influ_phylolm: no visible global function definition for ‘aes’
plot_influ_phylolm: no visible binding for global variable ‘slope’
plot_influ_phylolm: no visible binding for global variable
‘..density..’
plot_influ_phylolm: no visible global function definition for
‘geom_histogram’
plot_influ_phylolm: no visible global function definition for
‘geom_density’
plot_influ_phylolm: no visible global function definition for
‘geom_vline’
plot_influ_phylolm: no visible global function definition for ‘xlab’
plot_influ_phylolm: no visible global function definition for ‘theme’
您需要将相关的 Imports:
添加到 DESCRIPTION
,并将 importFrom(...)
添加到 NAMESPACE
。最近对此进行了相当多的讨论,例如参见 [=14=] 及其对进一步讨论的引用。
不是提倡规避规则,而是在弄清楚所有导入的来源时,您始终可以对 global variable
使用以下内容:
slope <- density <- NULL
将以上内容添加到这些变量出现的 .R
文件中,在变量出现在代码中之前。
此问题已在本网站 here and here.
上得到更详细的解决
至于函数定义,很难确定要使用与 ggplot2 一样大的 NAMESPACE 导入哪些函数,因此导入整个包可能最容易。我意识到这也不是 'best practice' 但它应该能让你通过 CRAN 检查。如果使用 roxygen
我通常使用包的描述文件,例如myPkg_package.R
:
#' @name myPkg-package
#' @docType package
#' @keywords package
#'
#' @import ggplot2
#'
NULL
或者,对于选择性导入:
#' @importFrom ggplot2 theme
然后您需要编辑 DESCRIPTION
文件以包含如下内容:
Imports: ggplot2
您甚至可能想为此使用 Depends:
,但不鼓励在 CRAN 上依赖多个包(例如 >4)。
您当然可以每次都指定 NAMESPACE,例如每次调用该函数时,将 theme
更改为 ggplot2::theme
。可以说这使代码更清晰,尽管它可能会变得有点乏味并且确实会增加一些执行时间的开销。这仍然需要您像上面那样声明进口。
我正在编写一个使用许多 ggplot2
函数的 R 程序包。问题是在 CRAN 测试期间,我有很多与 ggplot
函数相关的注释(见下文)。鉴于这种情况,为了避免来自 CRAN 的这些注释,在我的函数中使用 ggplot2
的最佳方法是什么?
我的代码示例:
s1 <- ggplot2::ggplot(result,aes(x=slope,y=..density..),
environment = environment())+
geom_histogram(fill="lightyellow",
alpha=.9,colour="grey60", size=.2) +
geom_density(size=.2) +
geom_vline(xintercept = slope.0,color="red",linetype=2,size=.7)+
xlab("Estimated slopes")+
theme(axis.text = element_text(size=14),
axis.title = element_text(size=16))
CRAN 笔记:
plot_influ_phylolm: no visible global function definition for ‘aes’
plot_influ_phylolm: no visible binding for global variable ‘slope’
plot_influ_phylolm: no visible binding for global variable ‘..density..’
plot_influ_phylolm: no visible global function definition for ‘geom_histogram’
plot_influ_phylolm: no visible global function definition for ‘geom_density’
plot_influ_phylolm: no visible global function definition for ‘geom_vline’ plot_influ_phylolm: no visible global function definition for ‘xlab’
plot_influ_phylolm: no visible global function definition for ‘theme’
您需要将相关的 Imports:
添加到 DESCRIPTION
,并将 importFrom(...)
添加到 NAMESPACE
。最近对此进行了相当多的讨论,例如参见 [=14=] 及其对进一步讨论的引用。
不是提倡规避规则,而是在弄清楚所有导入的来源时,您始终可以对 global variable
使用以下内容:
slope <- density <- NULL
将以上内容添加到这些变量出现的 .R
文件中,在变量出现在代码中之前。
此问题已在本网站 here and here.
至于函数定义,很难确定要使用与 ggplot2 一样大的 NAMESPACE 导入哪些函数,因此导入整个包可能最容易。我意识到这也不是 'best practice' 但它应该能让你通过 CRAN 检查。如果使用 roxygen
我通常使用包的描述文件,例如myPkg_package.R
:
#' @name myPkg-package
#' @docType package
#' @keywords package
#'
#' @import ggplot2
#'
NULL
或者,对于选择性导入:
#' @importFrom ggplot2 theme
然后您需要编辑 DESCRIPTION
文件以包含如下内容:
Imports: ggplot2
您甚至可能想为此使用 Depends:
,但不鼓励在 CRAN 上依赖多个包(例如 >4)。
您当然可以每次都指定 NAMESPACE,例如每次调用该函数时,将 theme
更改为 ggplot2::theme
。可以说这使代码更清晰,尽管它可能会变得有点乏味并且确实会增加一些执行时间的开销。这仍然需要您像上面那样声明进口。