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。可以说这使代码更清晰,尽管它可能会变得有点乏味并且确实会增加一些执行时间的开销。这仍然需要您像上面那样声明进口。