如果我需要在我正在创建的包内使用函数内的数据集(作为查找表),我是否需要在函数内部显式加载数据集?
函数和数据集都是我的包的一部分。
这是在函数中使用该数据集的正确方法:
foo <- function(x){
x <- dataset_in_question
}
或者这样更好:
foo <- function(x){
x <- data(dataset_in_question)
}
还是有一些方法我没想到这是正确的?
答案 0 :(得分:11)
关于R-devel的这个主题(在包开发的上下文中)有一个recent discussion,其中许多要点都与这个问题有关:
如果您提供的选项仅适用于您的示例R本身(即Brian Ripley),则告诉您:
foo <- function(x){
data("dataset_in_question")
}
然而,这种方法会在R CMD检查中抛出一个注释,在即将推出的R版本(或当前的R devel)中可以使用globalVariables()
函数added by John Chambers
“正确”方法(即Brian Ripley和Peter Dalgaard提倡的方法)将使用您的包的LazyData选项。请参阅this section of "Writing R Extensions"。
x <- dataset_in_question
应该做什么? dataset_in_question
是全局变量还是以前定义的?
答案 1 :(得分:1)
对我而言,有必要在get()
文件LazyData: true
中使用DESCRIPTION
(请参阅@Henrik第3点的postig)以取消注释{{1 }}。我的R版本是no visible binding for global variable ...
。
3.2.3
因此,LazyData可以直接访问foo <- function(x){
get("dataset_in_question")
}
(不使用dataset_in_question
),而data("dataset_in_question", envir = environment())
则满足get()
HTH
答案 2 :(得分:1)
可以将数据集作为.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)
将按照所需的方式设置所有内容。