【发布时间】:2015-06-17 00:50:51
【问题描述】:
为什么下面的fn和gn这两个函数不一样?我不认为他们应该是,但我一定是错过了什么。
vars <- letters[1:10]
a <- b <- 1
fn <- function (d) {
sapply( vars, exists )
}
gn <- function (d) {
sapply( vars, function (x) { exists(x) } )
}
fn(d=2)
# a b c d e f g h i j
# TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE TRUE FALSE
gn(d=2)
# a b c d e f g h i j
# TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
exists("i")
# [1] FALSE
有两个区别:
-
gn(d=2)说d存在,但为什么fn(d=2)不存在? -
fn(d=2)表示i存在,而gn(d=2)不存在。这令人费解,因为我没有在任何地方定义i。
注意:这是在 R 版本 3.2.0 上,第二个行为似乎是该版本的新行为(见下文)。
【问题讨论】:
-
两者都为我返回
FALSE为i。你能分享你看到的输出吗?听起来你可能已经在不同的环境中定义了你的函数,这个例子实际上并没有重现问题。 -
我遇到了与 OP
rm(list = ls()); ls() character(0); exists('i') [1] FALSE, sapply('i', exists) i TRUE相同的异常情况 -
sapply很可能会临时创建一个对象i并在评估后将其丢弃。但是按照这个逻辑,所有vars输入都应该返回TRUE。 -
@plafort 你运行的是什么版本的 R?
-
@plafort 是的。我两个都错了。我在 R 3.1.0 上测试过。