15

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

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

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

foo <- function(x){
    x <- dataset_in_question
}

还是这样更好:

foo <- function(x){
    x <- data(dataset_in_question)
}

还是有一些我认为不正确的方法?

4

3 回答 3

12

最近在 R-devel 上有一个关于这个主题的讨论(在包开发的背景下),其中有很多点与这个问题有关:

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

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

  3. “正确”的方法(即,Brian RipleyPeter Dalgaard提倡的方法)是为您的包使用 LazyData 选项。请参阅“编写 R 扩展”的这一部分

顺便说一句:我不完全理解您的第一种方法应该如何工作。应该x <- dataset_in_question怎么做?是dataset_in_question全局变量还是之前定义的?

于 2012-05-08T07:30:18.563 回答
1

对我来说,有必要在文件中get()额外使用(参见@Henrik 的postig第 3 点)来摆脱 NOTE 。我的 R 版本是.LazyData: trueDESCRIPTIONno 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

高温高压

于 2016-01-20T15:54:14.747 回答
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)将以所需的方式设置所有内容。

于 2017-08-29T15:05:34.283 回答