2013-10-02 24 views
12

与R中绑定和环境调整打,我们这3个功能:如何解锁R中的环境?

  1. lockEnvironment(env)锁包膜,所以你不能一个新的符号添加到ENV。
  2. lockBinding(sym, env)在env中锁定sym,所以你不能修改它
  3. unlockBinding(sym, env)放松后者的锁定。

但我该如何解锁环境?也许我错过了一些东西,但它看起来像R不公开unlockEnvironment函数或等效机制来解锁env?这是否有一些设计理由?

这里如何使用此功能的例子:

e <- new.env() 
lockEnvironment(e) 
get("x",e) 
assign("x",2,envir=e) 
lockBinding("x", e) 
get("x",e) 
unlockBinding("x", e) 
assign("x",3,envir=e) 

## how to relese e lock? 
unlockEnvironment(e) ## the function doesn't exist 

回答

0

我认为你所能做的最好的就是创造一个新的解锁环境。您可以复制所有字段,也可以将现有字段作为新字段的父字段。这意味着所有现有的变量都会被继承。

unlockEnvironment <- function (env) { 
    return (new.env(parent=env)) 
} 

e <- unlockEnvironment(e)