我最近写了一个 R 扩展。这些函数使用包中包含的数据,因此必须加载它们。子程序也需要访问数据。
这是采取的方法:
main<- function(...){
data(data)
sub <- function(...,data=data){...}
...
}
我对数据驻留在其中的事实感到不满意,.GlobalEnv
因此当函数终止时它仍然存在(也破坏了通过参数概念的向下传递)。
请让我走上正轨!当您必须在包函数中处理包数据时,您如何使用环境?
我最近写了一个 R 扩展。这些函数使用包中包含的数据,因此必须加载它们。子程序也需要访问数据。
这是采取的方法:
main<- function(...){
data(data)
sub <- function(...,data=data){...}
...
}
我对数据驻留在其中的事实感到不满意,.GlobalEnv
因此当函数终止时它仍然存在(也破坏了通过参数概念的向下传递)。
请让我走上正轨!当您必须在包函数中处理包数据时,您如何使用环境?
如果您的功能需要数据,而不是包的用户,则应将其保存在sysdata.rda
位于 R 目录中的一个名为的文件中。
从 R 扩展:
允许两个例外:如果 R 子目录包含文件 sysdata.rda(R 对象的保存图像:请使用 tools::resaveRdaFiles 建议的适当压缩)这将被延迟加载到命名空间/包环境中 - 这是用于不打算让用户通过数据访问的系统数据集。
It looks that you are looking for the LazyData
directive in your namepace:
LazyData: yes
Othewise, data
has the envir
argument you can use to control in which environment you want to load your data, so for example if you wanted the data to be loaded inside main
, you could use :
main<- function(...){
data(data, envir = environment() )
sub <- function(...,data=data){...}
...
}