如果我需要在我正在创建的包内的函数(作为查找表)内使用数据集,是否需要在函数内显式加载数据集?
函数和数据集都是我的包的一部分。
这是在函数内使用该数据集的正确方法吗:
foo <- function(x){
x <- dataset_in_question
}
还是这样更好:
foo <- function(x){
x <- data(dataset_in_question)
}
还是有一些我认为不正确的方法?
如果我需要在我正在创建的包内的函数(作为查找表)内使用数据集,是否需要在函数内显式加载数据集?
函数和数据集都是我的包的一部分。
这是在函数内使用该数据集的正确方法吗:
foo <- function(x){
x <- dataset_in_question
}
还是这样更好:
foo <- function(x){
x <- data(dataset_in_question)
}
还是有一些我认为不正确的方法?
最近在 R-devel 上有一个关于这个主题的讨论(在包开发的背景下),其中有很多点与这个问题有关:
如果您提供的选项仅适用于您的示例 R 本人(即Brian Ripley)告诉您这样做:
foo <- function(x){
data("dataset_in_question")
}
然而,这种方法将在 R CMD 检查中抛出一个注释,这可以通过使用John Chambers 添加globalVariables()
的函数在即将发布的 R 版本(或当前 R 开发)中避免
“正确”的方法(即,Brian Ripley和Peter Dalgaard提倡的方法)是为您的包使用 LazyData 选项。请参阅“编写 R 扩展”的这一部分。
顺便说一句:我不完全理解您的第一种方法应该如何工作。应该x <- dataset_in_question
怎么做?是dataset_in_question
全局变量还是之前定义的?
对我来说,有必要在文件中get()
额外使用(参见@Henrik 的postig第 3 点)来摆脱 NOTE 。我的 R 版本是.LazyData: true
DESCRIPTION
no visible binding for global variable ...
3.2.3
foo <- function(x){
get("dataset_in_question")
}
所以 LazyData 可以dataset_in_question
直接访问(不使用data("dataset_in_question", envir = environment())
)并且get()
满足R CMD check
高温高压
可以将数据集作为 .rda 文件放在 R 文件夹中,如 Hadley 所述:http: //r-pkgs.had.co.nz/data.html#data-sysdata
Matthew Jockers 在syuzhet包中使用这种方法来处理数据集,包括bing
在 ~ 452 行看到的数据集:https ://github.com/mjockers/syuzhet/blob/master/R/syuzhet.R
bing
对用户不可用,但对包可用,如下所示:syuzhet:::bing
本质上,该命令devtools::use_data(..., internal = TRUE)
将以所需的方式设置所有内容。