2013-10-02 59 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)