我是R的新手并试图弄清楚局部变量,绑定变量和全局变量的行为。我对以下问题感到困惑。如果我按以下方式编写函数,那么函数f的局部,边界和全局变量是什么?
f <- function(a ="") {
return_a <- function() a
set_a <- function(x)
a <<- x
list(return_a,set_a)
}
答案 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"