为什么 NA | FALSE = NA?

4
我最初想知道为什么 FALSE | NA 返回
#> [1] NA,而
TRUE | NA 返回
#> [1] TRUE
然后我看到了这样的解释:"因为在 NA | FALSE 中缺失元素的值很重要,所以结果是缺失的"。
于是我尝试了 TRUE | FALSEFALSE | TRUE。两者的结果都是#>[1] TRUE
因为 NA | FALSE 的结果取决于 NA 的值,所以返回 NA,而对于 NA | TRUE 来说,NA 的值并不重要,只要返回 TRUE 就可以了。
但是,有人能解释一下为什么 TRUE | FALSE 返回 TRUE 吗?
谢谢!
2个回答

4

本质上,它询问至少一侧是否为TRUE。由于存在一个TRUE值,结果也是TRUE

这与以下情况相同:

1 > 0 | 0 > 2
[1] TRUE

相反,当它询问所有方面是否均为TRUE时:

TRUE & FALSE
[1] FALSE

就像这个数字例子一样:

1 > 0 & 0 > 2
[1] FALSE

很好。这也解释了&运算符以及为什么TRUE & FALSE返回FALSE... - Sotos
太好了!谢谢。 我仍然有点想知道为什么“至少一边”必须为TRUE才能返回TRUE。 为什么不是“至少一边”必须为FALSE才能返回FALSE?.. 但是我暂时对这个答案感到满意 :) - Ane
也许它有一个严肃的解释(例如当TRUE被转换为数字值时,它表示为1,因此它比表示为0FALSE具有优先权),但我认为这主要是惯例(即使分配0/1也是如此):) - tmfmnk

1
对于操作符|,只要至少有一个条件为TRUE,则输出结果为TRUE。例如,TRUE | FALSE| FALSE | FALSE的结果是TRUE,但FALSE | FALSE| FALSE | FALSE的结果是FALSE,因为它没有TRUE条件。
由于NA可以是TRUEFALSE,但你不知道确切的值。
  • 在这个意义上,FALSE | NA 可能等同于 FALSE | TRUE(得到 TRUE)或 FALSE | FALSE(得到 FALSE),这是两种可能性,但仍然不可用,因此 FALSE | NA 返回 NA

  • 然而,对于 TRUE | NA,它总是 TRUE,因为它不取决于 NANA 作为 TRUEFALSE 都不会影响结果)


根据R文档:“NA是一个有效的逻辑对象。如果x或y的组件为NA,则结果将为NA,如果结果不确定。换句话说,NA&TRUE评估为NA,但NA&FALSE评估为FALSE。” - otwtm
@otwtm 是的,这就是我回答中所解释的。 - ThomasIsCoding
是的,只是想用参考资料来支持你的答案 :) - otwtm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接