所以我们有这种行为:
any(c(TRUE, FALSE, NA))
#> [1] TRUE
any(c(TRUE, NA))
#> [1] TRUE
any(c(FALSE, NA))
#> [1] NA
Run Code Online (Sandbox Code Playgroud)
有人知道返回NA而不是FALSE的理由吗?IMO该函数应该测试是否存在非FALSE值,NA不是.
在帮助文件的值部分中解释了此行为:
如果x中的至少一个值为TRUE,则返回的值为TRUE;如果x中的所有值都为FALSE,则返回FALSE(包括没有值时).否则值为NA.
正如您所注意到的,这似乎与更常用的函数(例如sum和)的行为不同mean,因为在这些函数的向量参数中存在NA值会返回NA.感知中的这个问题被joran的答案清除了,该答案指的是文件?Logic,重新引用:
NA是一个有效的逻辑对象.如果x或y的分量是NA,如果结果不明确,则结果将是NA.换句话说,NA&TRUE评估为NA,但NA&FALSE评估为FALSE.请参阅以下示例.
因此,在模糊性的情况下,例如,计算向量包含NA的均值,或者NA | FALSE缺失值可能为TRUE,NA将是输出.而在其他情况下,例如any(c(TRUE, NA))或TRUE | NA,尽管存在缺失值,结果仍然是明确的.在@ Floo0的答案和对问题的一些评论中,这个逻辑可能更清楚.
我可能会弄错,但这里的逻辑是:
NA意味着未知的价值 所以问题
(
FALSE,NA)的值是否为真?
回答"我不知道"又名NA因为NA可能TRUE但是在你问的那一刻它是未知的.
提出问题
(
TRUE,NA)的任何值都是真的吗?
这TRUE肯定是第一个值TRUE.