如何在R中解锁环境?

时间:2013-10-02 08:05:01

标签: r locking

在R中使用绑定和环境调整,我们有以下3个功能:

  1. lockEnvironment(env)锁定env,因此您无法为env添加新符号。
  2. lockBinding(sym, env)将sym锁定在env中,因此无法对其进行修改
  3. unlockBinding(sym, env)放松后一把锁。
  4. 但我怎样才能解锁环境?也许我错过了一些东西,但看起来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
    

1 个答案:

答案 0 :(得分:2)

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

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

e <- unlockEnvironment(e)