3

我正在创建一个包含数据集和使用数据的 R 函数的 R 包。R 函数如下所示:

myFun <- function(iobs){

            data(MyData)
            return(MyData[iobs,])

           }

当我做通常的“R CMD check myPack”业务时,它给了我一个错误提示

* checking R code for possible problems ... NOTE
myFun: no visible binding for global variable ‘MyData’

有没有办法解决这个问题?

4

2 回答 2

5

您可以为此使用延迟加载。

就放

LazyData: yes

在您的说明文件中并删除

data(MyData)

从你的功能。由于延迟加载,您的 MyData-Object 将在您的命名空间中可用,因此无需调用 data()。

于 2013-01-09T22:15:49.430 回答
4

惰性数据方法的两种替代方案。两者都依赖于使用list参数来data

data(list = 'MyData')


定义为函数的默认参数(可能不理想,因为可以更改)

myFun <- function(iobs, myData = data(list='MyData')){


  return(myData[iobs,])

}

加载到一个空的环境中,然后使用[[.

myFun2 <- function(iobs){
  e <- new.env(parent = emptyenv())
  data(list='MyData', envir = e)
  e[['MyData']][iobs,]

}

请注意,这 e$MyData[iobs,]也应该有效。

我还建议使用as safe practice 来保留与 eg drop = TRUE相同的类。考虑到此函数的细节和 的结构,这可能不是问题,但这是一种良好的编程习惯,尤其是在需要健壮代码的包中。MyDataMyData[iobs,,drop=TRUE]MyData

于 2013-01-09T23:14:38.907 回答