没有可见的全局函数定义'中位数'。

46

自从最新的R更新之后,我收到了如下提示:

summary.xmlImport:在CRAN检查中没有可见的全局函数定义“median”

其他注意事项涉及R中的read.tablewrite.table和其他标准函数。

当我查看我的文件summary.xmlImport时,文件内容如下:

summary.xmlImport <- function(object, ...){

   rowCount <- sapply(object,nrow)
   cat("Summary of xmlImport object\n")
   cat("---------------------------\n")
   cat("Sequences    :",length(object),"\n")
   cat("Min hits     :",min(rowCount),"\n")
   cat("Average hits :",mean(rowCount),"\n")
   cat("Median hits  :",median(rowCount),"\n")
   cat("Max hits     :",max(rowCount),"\n")
   invisible(object)

} 

我不明白为什么现在应该将 median 函数添加到 NAMESPACE,而不是 minmean 等等。这个提示只涉及 median 函数。

有人知道为什么会出现这个提示以及如何解决吗?我注意到目前有很多 R 包都有同样的提示。

我可以理解在非声明变量的情况下出现这个警告,但是我会认为 median()read.table() 等函数在 R 中是全局可见的,特别是像 mean() 一样!?

编辑:我只在 CRAN 上收到这个提示,而在我的本地电脑上没有,这使得解决方案的搜索有点麻烦...... 我电脑的 session info:

> sessionInfo()
R version 3.2.1 (2015-06-18)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 14.04.2 LTS

6
不确定是否相关,但是函数lengthmeanminmax来自于base包,而函数median则来自于stats包。 - user3710546
1
谢谢你的提示,我以为median也在base里面,我会尝试将stats包导入到NAMESPACE中,也许因为在R.3.2.1中只有base函数是全局可见的... - Daniel Fischer
根据Thomas的回答,情况确实如此。 - user3710546
我因同样的原因在package-devel邮件列表上发起了一次讨论。另一个建议是有选择地添加命名空间。 - Daniel
1个回答

68
截至 2015年6月29日星期一,为了通过R CMD check --as-cran,所有非base函数必须在NAMESPACE中明确导出。这个变化是因为现在只有base包被附加到代码中进行检查,因此来自默认包(如stats)的函数必须明确列出。
要导入这些包,请考虑执行以下操作:
  • 在DESCRIPTION中,您可能想要将它们列在Imports中。几乎没有理由在Depends中列出软件包。
  • 在NAMESPACE中,您可以选择import(stats)importFrom(stats, ...),其中...是一个或多个逗号分隔的函数名称。(如果您使用roxygen2::roxygenize()devtools::document()生成文档和NAMESPACE,则类似的标记将是#' @import stats#' @importFrom stats ...。)

如果您想以模拟此方式的交互方式使用R,您需要仅附加基本软件包并启动R。 有几种方法可以做到这一点,但最简单的方法可能是在您的shell中设置环境变量:R_DEFAULT_PACKAGES=NULL或在.Renviron文件中,然后使用R --vanilla启动R。在终端或bash中,这将是:

$ export R_DEFAULT_PACKAGES=NULL
$ R --quiet --vanilla
> search()
[1] ".GlobalEnv"   "Autoloads"    "package:base"

在Windows命令提示符中,它将是:
C:\>SET R_DEFAULT_PACKAGES=NULL
C:\>R --quiet --vanilla
> search()
[1] ".GlobalEnv"   "Autoloads"    "package:base"

2
谢谢,看起来将来阅读R-Devel是值得的。 - Daniel Fischer
@DanielFischer 是的,CRAN会在R-devel上运行检查(即每日发布的R版本),因此在尝试提交之前,您需要安装该R版本并通过其检查运行您的软件包。它们可能会每天更改而没有通知。 - Thomas
3
如果我使用roxygen,那么在Imports中应该包含stats和so,而对于任何使用stats功能的函数,则应在其上方加上@import stats。 - Tom Wenseleers
相关问题是如何设置我的RStudio默认仅附加基本包,以便我可以模拟它们现在在CRAN上进行的测试?因为我在这里通过了R CMD check --as-cran,但在CRAN上没有通过... - Tom Wenseleers
1
@TomWenseleers 我对roxygen一无所知,因为我不使用它。关于检查,只需确保您在最新的R-devel上运行所有内容(即每日构建版本),而不是最新的R发行版。这可能是您获得不同结果的原因。 - Thomas
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接