R中的作用域赋值和局部,绑定和全局变量

时间:2015-02-17 05:36:45

标签: r function variables global-variables local

我是R的新手并试图弄清楚局部变量,绑定变量和全局变量的行为。我对以下问题感到困惑。如果我按以下方式编写函数,那么函数f的局部,边界和全局变量是什么?

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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

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

确实在p [[1]]的环境中改变了符号 - a的值:

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