全局和功能环境:变量定义

sed*_*siv 1 r global-variables

我有一个对我来说很奇怪的问题.为什么以下不会给我一个错误?

foo <- function(a, b) {
  a <- 2
  a * b
}

b <- 7

foo(a, b)
[1] 14
Run Code Online (Sandbox Code Playgroud)

exists("a")
[1] FALSE
Run Code Online (Sandbox Code Playgroud)

为什么我错在foo(a, b)应该导致的期望Error: object 'a' not found

Kel*_*ean 5

foo(a,b)因为您a <- 2在函数本身中设置了变量,所以不会返回错误.该函数从未实际使用a您传递的函数,因此您不会收到错误.

如果你注释掉a<-2,那么你将得到预期的错误.exists默认情况下检查全局环境,而不是在函数中创建的变量的存在.

  • 你可以使用`foo(3,7)`看到这个答案中描述的结果.仍然给14! (2认同)