改变R

时间:2015-08-18 04:43:49

标签: r environment

有没有办法将R中的工作环境或工作空间设置为已定义的环境?我想在不经常引用环境的环境中调用变量。我知道attach函数可以用这种方式访问​​变量,但是创建的任何变量都不会放回到附加的环境中。目标是让所有功能都在其他环境中进行。

例如:

original.env <- .GlobalEnv
other.env <- new.env()  
other.env$A <- 12; other.env$B <- 1.5
set.env(other.env)  
C <- A + B          
set.env(original.env)   
other.env$C         
[1] 13.5

这是set.env的一步,我无法弄清楚它是否存在,或者还有其他一些技巧可以做到这一点。

这种方法的目标是允许在几个非嵌套环境中使用相同结构的相同代码,而不断调用具有Environment$前缀的其他环境,在许多情况下变得非常冗长。

如果结果也可以分配回设置环境(如在全局环境中,任何变量前面都有隐式.GlobalEnv$),那么访问和返回多个值将更容易在函数内部。

感谢任何帮助。感谢。

2 个答案:

答案 0 :(得分:6)

您正在寻找eval / evalq

来自help("evalq")

  

评估指定环境中的R表达式。

具体来说,evalq注意

  

evalq表单相当于eval(quote(expr),...)。 eval在将它传递给求值程序之前计算当前作用域中的第一个参数:evalq避免这种情况。

# Therefore you want something like this
evalq(C <- A + B, envir = other.env)

如果要包装多个表达式,请使用{},例如

evalq({C <-A + B
    d <-  5
       }, envir = other.env)

答案 1 :(得分:3)

如何使用with

original.env <- .GlobalEnv
other.env <- new.env() 
other.env$A <- 12; other.env$B <- 1.5
with(other.env, { C <- A + B ; FOO <- 'bar' })
other.env$C
[1] 13.5
other.env$FOO
[1] "bar"