使用环境来处理包函数中的包数据

时间:2012-11-14 09:35:33

标签: r

我最近写了一个R扩展名。这些函数使用包中包含的数据,因此必须加载它们。子程序还需要访问数据。

这是采取的方法:

main<- function(...){
    data(data)
    sub <- function(...,data=data){...}
...
}

我对数据驻留在.GlobalEnv这一事实感到不满,因此当函数终止时它仍然会挂起(也会破坏通过参数概念的下行)。

请把我放在正确的轨道上!当你必须在包函数中处理包数据时,你如何使用环境?

2 个答案:

答案 0 :(得分:3)

看起来您正在寻找名称空间中的LazyData指令:

LazyData: yes

其他,dataenvir参数,可用于控制要加载数据的环境,例如,如果您希望在main内加载数据,你可以使用:

main<- function(...){
    data(data, envir = environment() )
    sub <- function(...,data=data){...}
    ...
}

答案 1 :(得分:3)

如果您的功能需要数据,而不是包的用户,则应将其保存在R目录中名为sysdata.rda的文件中。

来自R扩展:

  

允许两个例外:如果R子目录包含文件   sysdata.rda(R对象的已保存图像:请使用合适的   压缩,如tools :: resaveRdaFiles建议)这将是   延迟加载到命名空间/包环境中 - 这是预期的   对于不打算通过用户访问的系统数据集   数据