编程语言R中环境的神秘行为
我发现r环境中有一些奇怪的行为,我无法解释。我访问了一个关于r环境的网站,但是仍然没有得到任何线索。在下面,我将用一个简单的例子来说明这个问题编程语言R中环境的神秘行为,r,R,我发现r环境中有一些奇怪的行为,我无法解释。我访问了一个关于r环境的网站,但是仍然没有得到任何线索。在下面,我将用一个简单的例子来说明这个问题 f1 <- function(a) { #print(paste('print a from f1', a)) # if uncommented, will produce my expected result return(environment()) } f2 <- function() { a <- 1 e &l
f1 <- function(a) {
#print(paste('print a from f1', a)) # if uncommented, will produce my expected result
return(environment())
}
f2 <- function() {
a <- 1
e <- f1(a) # get the local environment of f1
a <- 2
return(e)
}
print(f2()$a)
f1请参阅可能的副本,感谢John@jdharison的及时回复。事实上,懒惰的评估是原因。为了其他读者的利益,我将在下面做一个简短的解释。根据,未经评估的论点称为承诺。第一次访问承诺时,表达式将在创建它的环境中求值。在我的示例中,函数f1
的参数a
在通过f2()$a
检索其值之前,不会进行求值(如果我们注释掉打印命令)。到那时,f2
的执行环境中的a
的值已经是2。