繁体   English   中英

作用域在R中如何工作?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM