函数内的数据(包创建)

时间:2012-05-08 04:56:06

标签: r

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

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

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

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

或者这样更好:

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

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

3 个答案:

答案 0 :(得分:11)

关于R-devel的这个主题(在包开发的上下文中)有一个recent discussion,其中许多要点都与这个问题有关:

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

    foo <- function(x){
       data("dataset_in_question")
    }
    
  2. 然而,这种方法会在R CMD检查中抛出一个注释,在即将推出的R版本(或当前的R devel)中可以使用globalVariables()函数added by John Chambers

  3. “正确”方法(即Brian RipleyPeter Dalgaard提倡的方法)将使用您的包的LazyData选项。请参阅this section of "Writing R Extensions"

  4. 顺便说一下:我不完全明白你的第一种方法应该如何运作。 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)将按照所需的方式设置所有内容。