Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
编程语言R中环境的神秘行为_R - Fatal编程技术网

编程语言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

我发现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 <- 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。