我发现了r环境的一些奇怪的行为,我无法解释。我访问了Hadley's site,他谈了很多关于环境的事情,但仍然无法得到任何线索。在下文中,我将用一个简单的例子来说明问题
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)
我希望f2()$a
的结果为1(当调用f1
时,a
绑定到1,将记录在本地环境中),但实际上我得到2. 更奇怪是,如果我取消注释print
中的f1
命令,f2()$a
会给我1!
我怀疑在函数f1
的本地环境中为输入a
记录的内容类似于指针(指向调用中的相应对象)环境)。当调用环境中的对象发生更改时,此更改也将被带到本地环境。但是,这并没有解释为什么在取消注释print
命令后得到预期的结果。任何人都可以帮忙解决这个难题吗?