r - 如何解锁R中的环境?

标签 r locking

在 R 中使用绑定(bind)和环境调整,我们有这 3 个功能:

  • lockEnvironment(env)锁定 env,因此您无法向 env 添加新符号。
  • lockBinding(sym, env)将 sym 锁定在 env 中,因此您无法修改它
  • unlockBinding(sym, env)放松后一个锁。

  • 但是我怎样才能解锁环境呢?也许我错过了一些东西,但看起来 R 没有公开 unlockEnvironment解锁环境的功能或等效机制?这有什么设计原因吗?

    下面是如何使用此功能的示例:
    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
    

    最佳答案

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

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

    关于r - 如何解锁R中的环境?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19132492/

    相关文章:

    r - 如何使用R合并空间坐标数据集?

    r - 如何在 ggplot2 R 中绘制一条回归线,但按不同因素绘制颜色点?

    c - rcu_read_locks 的嵌套

    java - 获取多个锁时发生死锁

    r - nearPoints 无法从 Shiny 的坐标信息中自动推断出 `xvar`

    r - 列表示 3d 矩阵(立方体)Rcpp

    reshape 原始目标数据

    Java 将显式锁与同步方法结合起来

    mysql - innodb 超时回滚

    c - 为什么 tasklist_lock 使用 write_lock_irq 而不是 write_lock?