[英]How does scoping work in R?
a <- 10
f <- function(){
a <<- 3
function() {
a <<- 15
a <- 5
return(a)
}
}
g <- f()
g()
a
当我运行上面的代码时,我得到以下输出:
五
15
有人可以解释一下第二个输出是15而不是3吗? 当我在函数f中不使用“ <<-”时,相同的代码将返回10。
只要看看您的函数f
返回什么即可。
f()
function() {
a <<- 15
a <- 5
return(a)
}
<environment: 0x000000001f1c7898>
因此,当您将此结果分配给g
它将在上面的输出中变为该函数。 调用g
时,代码行a <<- 3
永远不会执行。
换句话说,以与解释第一输出相同的方式解释第二输出, g
将存在于globalenv
的变量a
设置为15
并返回在其自身环境中创建的变量a <- 5
的值。
编辑。
请注意,如果像Dason在评论中所说的那样,在调用g
之前打印a
,则其值已更改为3
就像您在问题中所期望的那样。 当调用f
时,确实执行了代码行a <<- 3
。
g <- f() # call 'f'
a # print 'a', the value has changed
[1] 3
g() # now call 'g'
[1] 5
a # and the value of 'a' changed again
[1] 15
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.