我有一个在其中创建环境的函数,我希望将该环境分配给全局环境。目前,我通过将环境分配给globalenv()作为最后一步来做到这一点-如下所示:

funfun <- function(inc = 1){
    dataEnv <- new.env()
    dataEnv$d1 <- 1 + inc
    dataEnv$d2 <- 2 + inc
    dataEnv$d3 <- 2 + inc
    assign('dataEnv', dataEnv, envir = globalenv())
}

感觉到函数dataEnv结束时我应该能够做些事情来使funfun持久存在(以便最后保存复制环境),但是我的尝试(例如dataEnv <- new.env(parent = globalenv()))没有奏效。

为什么会失败?这可能吗?

另外,最有效的方法是什么?

我的表有时很大,随着项目的发展,复制将成为一个问题。

最佳答案

退出功能不会破坏您的环境。您只需要返回对它的引用。

funfun <- function(inc = 1){
  dataEnv <- new.env(parent=globalenv())
  dataEnv$d1 <- 1 + inc
  dataEnv$d2 <- 2 + inc
  dataEnv$d3 <- rnorm(10000)
  return(dataEnv)
}


myEnv <- funfun()
object.size(myEnv)

拿出一些东西
head(myEnv$d3)

10-07 12:53