如何测试函数环境中是否存在变量?

How do I test for existence of a variable within a function's environment?

给定函数f()如下:

f = function(a) {
  if(a > 0) b = 2
  c = exists('b')
  return(c)
}

如何指定 exists() 函数只在函数 f 内搜索?

在空白环境下,调用 f(-5) 将 return FALSE 如我所愿,但如果我这样做

b = "hello"
f(-5)

然后我得到 TRUE。如何将 f(-5) 变为 return FALSE,即使用户在其脚本中的其他地方定义了 b 函数 f?

我预计这与 exists()where 参数有关,但我无法弄清楚调用此参数的正确环境是什么。我仍然没有完全了解 R 中的环境...

谢谢!

只需使用 exists 的 inherits= 参数。有关详细信息,请参阅 ?exists 帮助页面

b <- 100
f <- function(a) {
  if(a > 0) b <- 2
  c <- exists('b', inherits=FALSE)
  return(c)
}
f(5)
# [1] TRUE
f(-5)
# [1] FALSE