所以我们有这样的行为:为什么任何()返回NA如果没有真正的价值
any(c(TRUE, FALSE, NA))
#> [1] TRUE
any(c(TRUE, NA))
#> [1] TRUE
any(c(FALSE, NA))
#> [1] NA
谁知道返回NA,而不是假的理由? IMO的功能应该测试是否存在非FALSE值,而NA不是。
所以我们有这样的行为:为什么任何()返回NA如果没有真正的价值
any(c(TRUE, FALSE, NA))
#> [1] TRUE
any(c(TRUE, NA))
#> [1] TRUE
any(c(FALSE, NA))
#> [1] NA
谁知道返回NA,而不是假的理由? IMO的功能应该测试是否存在非FALSE值,而NA不是。
此行为是在帮助文件中的值部分解释:
返回的值是TRUE,如果在X的值的至少一个为真,假,如果所有的值的x是假的(包括如果没有值)。否则,该值为NA。
当你注意,这似乎从更常用的功能,如sum
和mean
行为不同,因为NA的存在向量参数这些函数返回值NA。此问题在感知受到joran's answer它指的是文档从?Logic
,清理重新报价:
NA是一个有效的逻辑对象。如果x或y的分量是NA,如果结果不明确,结果将为NA。换句话说NA & TRUE评估为NA,但不适用FALSE评估为FALSE。看下面的例子。
所以在歧义的情况下,例如,平均值的其中载体含有NA,或NA | FALSE
其中缺失值可能是TRUE的计算,NA将成为输出。而在其他情况下,例如any(c(TRUE, NA))
或TRUE | NA
,尽管存在缺失值,但结果是明确的。 @ Floo0的回答以及对问题的一些评论中,这种逻辑可能更清楚。
我将包裹该呼叫在isTRUE
,这产生所期望的结果:
> any(c(FALSE, NA))
[1] NA
> isTRUE(any(c(FALSE, NA)))
[1] FALSE
从文档:
'IsTrue运算(X)' 是“相同的缩写(TRUE, X)”,所以是 真当且仅当‘x’为长度为一个逻辑向量,其仅 元件是‘TRUE’,并且没有属性(即使不名称)。
好的提示,谢谢 – geotheory
我可能是错了,但这里的逻辑是:
NA
意味着未知的值。因此,问题
是(
FALSE
,NA
)的值是否为真?
的答案为“我不知道”又名NA
因为NA
可能是TRUE
但它是在你所问的那一刻未知。
以问题
是(
TRUE
,NA
)真什么价值?
这是回答TRUE
为肯定第一个值是TRUE
。
因为'FALSE | NA'返回NA – akrun
从帮助文件的values部分:“如果x中的至少一个值为TRUE,返回的值为TRUE,如果x中的所有值都为FALSE,则返回FALSE (包括如果没有值),否则值为NA。“ – lmo
使用'任何(na.omit(C(FALSE,NA)))'总是得到TRUE或FALSE。 – Axeman