我最近写了一个R扩展名。这些函数使用包中包含的数据,因此必须加载它们。子程序还需要访问数据。
这是采取的方法:
main<- function(...){
data(data)
sub <- function(...,data=data){...}
...
}
我对数据驻留在.GlobalEnv
这一事实感到不满,因此当函数终止时它仍然会挂起(也会破坏通过参数概念的下行)。
请把我放在正确的轨道上!当你必须在包函数中处理包数据时,你如何使用环境?
答案 0 :(得分:3)
看起来您正在寻找名称空间中的LazyData
指令:
LazyData: yes
其他,data
有envir
参数,可用于控制要加载数据的环境,例如,如果您希望在main
内加载数据,你可以使用:
main<- function(...){
data(data, envir = environment() )
sub <- function(...,data=data){...}
...
}
答案 1 :(得分:3)
如果您的功能需要数据,而不是包的用户,则应将其保存在R目录中名为sysdata.rda
的文件中。
来自R扩展:
允许两个例外:如果R子目录包含文件 sysdata.rda(R对象的已保存图像:请使用合适的 压缩,如tools :: resaveRdaFiles建议)这将是 延迟加载到命名空间/包环境中 - 这是预期的 对于不打算通过用户访问的系统数据集 数据