Чем local() отличается от других подходов к закрытию в R?

Вчера я узнал от Билла Венейблса, как local() может помочь создать статические функции и переменные, например,

example <- local({
  hidden.x <- "You can't see me!"
  hidden.fn <- function(){
    cat("\"hidden.fn()\"")
  }
  function(){
    cat("You can see and call example()\n")
    cat("but you can't see hidden.x\n")
    cat("and you can't call ")
    hidden.fn()
    cat("\n")
  }
})

которые ведут себя следующим образом из командной строки:

> ls()
[1] "example"
> example()
You can see and call example()
but you can't see hidden.x
and you can't call "hidden.fn()"
> hidden.x                 
Error: object 'hidden.x' not found
> hidden.fn()
Error: could not find function "hidden.fn"

Я видел, как подобное обсуждалось в Static Variables in R, где использовался другой подход.

В чем плюсы и минусы этих двух методов?

16
задан Community 23 May 2017 в 12:23
поделиться