Вчера я узнал от Билла Venables, как 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"
Я видел такие вещи, которые обсуждались в Статические переменные в R, где использовался другой подход.
Каковы плюсы и минусы этих двух методов?