R 中的范围分配和局部、绑定和全局变量

Scoping assignment and local, bound and global variable in R

我是 R 新手,正在尝试了解局部变量、绑定变量和全局变量的行为。我对以下问题感到困惑。如果我这样写函数,那么函数f的局部变量、绑定变量和全局变量分别是什么?

f <- function(a ="") {
  return_a <- function() a
  set_a <- function(x)
      a <<- x
  list(return_a,set_a)
}

return_a 是一个函数。 set_a 是一个函数。它们都是功能对象(具有关联的环境,但是使用 "variable" 这个词来描述它们似乎容易混淆。如果调用 f,您将得到一个双功能列表。当您创建一个列表时,有不一定是列表中的名称,因此 p$set_a("Carl") 会抛出错误,因为没有 p[['set_a']]

> p <- f("Justin"); p$set_a("Carl")
Error: attempt to apply non-function

但是 p[[2]] 现在 returns 一个函数,你需要调用它:

>  p[[2]]
function(x)
      a <<- x
<environment: 0x3664f6a28>

> p[[2]]("Carl")

确实在 p[[1]]:

的环境中改变了符号-a 的值
> p[[1]]()
[1] "Carl"