编程语言R中环境的神秘行为

时间:2014-12-28 09:02:33

标签: r

我发现了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命令后得到预期的结果。任何人都可以帮忙解决这个难题吗?

0 个答案:

没有答案