假设我有一个初始化新环境的功能:
init <-function()
{
e <- new.env()
}
此外,init
函数位于另一个.R文件中
然后,在初始化之后,我想开始在不同文件中的其他函数调用中使用它,例如
init.main <- function(e)
{
e$data <- list()
e$number <- 0
}
但是,这将引发错误,表明未找到对象e
。我认为这是因为e
仅在本地初始化,但是如果我要使用仅依赖于函数调用的程序包,我将如何使这些函数能够互相交谈并使用相同的环境?
这里是一种方法。
init <- local({
e <- NULL
function() {
e <<- new.env(parent = emptyenv())
}
})
init.main <- function() {
e <- get("e", envir = environment(init))
}
这实际上取决于您是否只需要一个e
还是希望能够拥有内容不同的多个环境。
在第一种情况下,只需在包的顶层定义e
,然后让init
函数修改该副本。例如,
e <- new.env()
init <- function() {
e <<- new.env()
}
然后包中的其他任何功能都可以看到e
并使用它。调用init()
将清除以前的所有内容并将其设置为空。
另一种情况要难一些,只是因为您需要处理多个具有相同名称的函数,这些函数引用不同的e
值。 R附带的R简介手册的10.7节中有一个示例。