“中位数”没有可见的全局函数定义
Posted
技术标签:
【中文标题】“中位数”没有可见的全局函数定义【英文标题】:no visible global function definition for ‘median’ 【发布时间】:2015-09-16 21:53:43 【问题描述】:自从最新的 R 更新以来,我收到了 Note
summary.xmlImport:
在 CRAN 检查中。更多注释参考R中的read.table
、write.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,但为什么不添加 min
、mean
等。注释仅与 median
函数有关。
有人知道 Note 的原因是什么以及如何解决它吗?我注意到目前有很多 R 包具有相同的注释。
我可以在未声明的变量的上下文中理解此警告,但我会假设 median()
、read.table()
和此类函数在 R 中是全局可见的,尤其是 mean()
似乎是!?
编辑:我只收到关于 CRAN 的注释,但没有在我的本地计算机上收到这使得搜索解决方案有点讨厌...我计算机的会话信息:
> sessionInfo()
R version 3.2.1 (2015-06-18)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 14.04.2 LTS
【问题讨论】:
不确定是否相关,但函数length
、mean
、min
和max
来自base
,函数median
来自stats
。
感谢您的提示,我假设median
也会在base
中,我会尝试将stats
包导入到NAMESPACE,可能是因为仅在R.3.2.1 中然后base
函数全局可见...
根据托马斯的回答,是这样的。
出于同样的原因,我开始讨论 package-devel-mailinglist。另一个建议是选择性地添加命名空间。
【参考方案1】:
从Monday June 29, 2015 开始,所有非base 函数必须在 NAMESPACE 中显式导出才能传递R CMD check --as-cran
。发生这种变化是因为现在检查代码时只附加了 base 包,因此必须明确列出默认包中的函数(例如 stats)。
要导入这些包,请考虑执行以下操作:
在说明中,您可能希望将它们列在Imports
中。几乎没有理由在 Depends
中列出软件包。
在 NAMESPACE 中,您可以在import(stats)
或importFrom(stats, ...)
之间进行选择,其中...
是一个或多个逗号分隔的函数名称。 (如果您使用roxygen2::roxygenize()
或devtools::document()
生成文档和NAMESPACE,类似的标记将是#' @import stats
和#' @importFrom stats ...
。)
如果您想以模仿此模式的方式与 R 交互工作,您将希望仅在附加的基本包的情况下启动 R。 There are several ways to do this,但可能最简单的方法是在 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"
【讨论】:
谢谢,看来以后读R-Devel还是值得的。 @DanielFischer 是的,CRAN 对 R-devel(即 R 的每日发布)运行检查,因此在您尝试提交之前,您需要安装该 R 版本并通过其检查运行您的包.它们可以每天更改,恕不另行通知。 那么当前推荐的这些 R 核心包(例如 stats)的语法是什么?它们应该如何包含在描述和命名空间中——你能否给出正确的语法?在 Depends 或 Imports 下? 所以如果我使用 roxygen,我是否应该在 Imports 中包含 stats 等,然后在任何使用来自 stats 的函数的函数中放入 @import stats 呢? @TomWenseleers 我不知道 roxygen,因为我不使用它。关于检查,只需确保您在最新的 R-devel(即每日构建)上运行所有内容,而不是最新的 R 版本。这可能是您得到不同结果的原因。以上是关于“中位数”没有可见的全局函数定义的主要内容,如果未能解决你的问题,请参考以下文章