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"
我是 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"