有效地将环境从内部功能转移到全局环境 [英] efficiently move environment from inside function to global environment

查看:66
本文介绍了有效地将环境从内部功能转移到全局环境的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have a function that creates an environment within it and i wish to assign that environment to the global environment. At present i do this by assigning the environment to globalenv() as the final step -- as follows:

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

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

It feels like i should be able to do something to make dataEnv persisit when the function funfun ends (to save copying the environment at the end) however my attempts, such as dataEnv <- new.env(parent = globalenv()), have not worked.

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

Why does it fail? Is this possible?

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

Also, what is the most efficient way of doing this?

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

My tables are very large at times, and the copying will become an issue as the project grows.

推荐答案

退出函数时,您的环境没有被破坏.您只需要返回对此的引用.

Your environment is not being destroyed when you exit the function. You just need to return a reference to it.

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)

这篇关于有效地将环境从内部功能转移到全局环境的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆