Как разблокировать среду в R?

Воспроизведение с привязкой и настройкой окружения в R, мы имеем следующие 3 функции:

  • lockEnvironment(env) блокирует env, поэтому вы не можете добавить новый символ в env.
  • lockBinding(sym, env) блокирует sym внутри env, поэтому вы не можете его изменить
  • 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

Ответ 1

Уинстон Чанг, кажется, Gist, который отвечает на это.

Ответ 2

Я думаю, что лучшее, что вы можете сделать, это создать новую разблокированную среду. Вы можете либо скопировать все поля, либо сделать существующим родительский элемент нового. Это означает, что все существующие переменные наследуются.

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

e <- unlockEnvironment(e)