函数内的数据(包创建)

Tyl*_*ker 13 r

如果我需要在我正在创建的包内的函数内使用数据集(作为查找表),我是否需要在函数内部显式加载数据集?

函数和数据集都是我的包的一部分.

这是在函数内使用该数据集的正确方法:

foo <- function(x){
    x <- dataset_in_question
}
Run Code Online (Sandbox Code Playgroud)

或者这更好:

foo <- function(x){
    x <- data(dataset_in_question)
}
Run Code Online (Sandbox Code Playgroud)

还是有一些方法我没想到这是正确的?

Hen*_*rik 11

最近关于R-devel的这个主题(在包开发的背景下)进行了讨论,其中许多要点与这个问题相关:

  1. 如果您提供的选项仅适用于您的示例R本人(即Brian Ripley)告诉您:

    foo <- function(x){
       data("dataset_in_question")
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 然而,这种方法将在R CMD检查中抛出一个注释,这可以通过使用John Chambers添加globalVariables()函数在即将到来的R版本(或当前的R devel)中避免.

  3. "正确"方法(即Brian RipleyPeter Dalgaard提倡的方法)将使用LazyData选项作为您的包.请参阅"编写R扩展"一节.

顺便说一句:我不完全明白你的第一种方法应该如何运作.该怎么x <- dataset_in_question办?是dataset_in_question全局变量还是之前定义的?


Tyl*_*ker 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)将按照需要的方式设置一切。

  • @jzadra 没什么大不了的,刚刚被移动到 **usethis** 包作为 `usethis::use_data` (2认同)