“中位数”没有可见的全局函数定义

Posted

技术标签:

【中文标题】“中位数”没有可见的全局函数定义【英文标题】:no visible global function definition for ‘median’ 【发布时间】:2015-09-16 21:53:43 【问题描述】:

自从最新的 R 更新以来,我收到了 Note

summary.xmlImport:

在 CRAN 检查中。更多注释参考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 函数有关。

有人知道 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

【问题讨论】:

不确定是否相关,但函数lengthmeanminmax 来自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 版本。这可能是您得到不同结果的原因。

以上是关于“中位数”没有可见的全局函数定义的主要内容,如果未能解决你的问题,请参考以下文章

c语言static作用范围是啥呢?

c语言怎样声明和定义全局变量

作用域闭包立即执行函数

作用域闭包立即执行函数

static关键字作用

函数,作用域,树,简介