检查变量是否存在

时间:2014-07-17 10:06:36

标签: r

我真的很难理解R的以下行为。假设我们想要定义一个函数f,它应该返回它的参数是否作为变量存在;但是我们想要在没有引号的情况下传递参数。因此,例如,要检查变量y是否存在,我们将调用f(y)

f <- function(x) {
    xchar <- deparse(substitute(x))
    exists(xchar)
}

所以我开始一个全新的R会话并定义f,但没有其他变量。然后我得到

f(y)
# [1] FALSE
f(z)
# [1] FALSE
f(f)
# [1] TRUE
f(x)
# [1] TRUE

前三个电话(yzf)会给出预期结果。但是没有名为x

的变量
exists("x")
# [1] FALSE
编辑我现在意识到这是因为使用了substitute,它将创建变量x。但有没有办法绕过这个?

2 个答案:

答案 0 :(得分:2)

对象x确实存在于函数内部,因为它是参数的名称。

如果修改功能

f <- function(...) {
      xchar <- deparse(substitute(...))
      exists(xchar)
     }

你可以看到预期的输出:

f(x)
# FALSE

答案 1 :(得分:0)

您可能只想搜索全球环境

f <- function(x) {
    xchar <- deparse(substitute(x))
    exists(xchar,where=globalenv())
}

在这种情况下你得到:

> f(y)
[1] FALSE
> f(f)
[1] TRUE
> f(x)
[1] FALSE
> f(z)
[1] FALSE
> f(mean)
[1] TRUE