【发布时间】:2015-08-02 03:39:51
【问题描述】:
这个问题与其他问题略有不同——我确实有一个名为“mypkgdata”的变量:
我正在编写一个附带数据集的包。包内的计算需要此数据集。在DESCRIPTION文件中,我为此指定了“LazyData”,这样当任何人加载包时,数据集总是存在的。但是,当我运行检查时,我得到:
.getmodules2: 全局变量“mypkgdata”没有可见的绑定
解决这个问题的正确方法是什么?
【问题讨论】:
这个问题与其他问题略有不同——我确实有一个名为“mypkgdata”的变量:
我正在编写一个附带数据集的包。包内的计算需要此数据集。在DESCRIPTION文件中,我为此指定了“LazyData”,这样当任何人加载包时,数据集总是存在的。但是,当我运行检查时,我得到:
.getmodules2: 全局变量“mypkgdata”没有可见的绑定
解决这个问题的正确方法是什么?
【问题讨论】:
如果您的说明文件中有 LazyData: TRUE,则以下内容应该有效:
x <- MyPackageName::mypkgdata
# ... your calculations using x
如果我尝试在没有 MyPackageName:: 部分的情况下调用它,我也会收到你的注释。
【讨论】:
这是我解决它的方法。我在包中创建了一个自定义环境,在这个环境中加载数据集,并写了一个返回数据集的函数:
pkgEnv <- new.env(parent=emptyenv())
if(!exists("mypkgdata", pkgEnv)) {
data("mypkgdata", package="mypkg", envir=pkgEnv)
}
getMyPkgData <- function() {
pkgEnv[["mypkgdata"]]
}
在使用“mypkgdata”的函数中,我写道:
mypkgdata <- getMyPkgData()
另外,我放弃了延迟加载数据,因为它不再需要。
【讨论】:
我认为不应将包中的数据标记为不可见。但是,解决方法是
if(getRversion() >= "2.15.1") utils::globalVariables("mypkgdata")
【讨论】: