【问题标题】:In R, (F & NA) is F but (T & NA) is NA -- why? [duplicate]在 R 中,(F & NA) 是 F 但 (T & NA) 是 NA - 为什么? [复制]
【发布时间】:2019-02-12 16:40:47
【问题描述】:

为什么R会这样?

> F & NA
[1] FALSE
> T & NA
[1] NA

我希望代码的第一行也可以评估为NA。人们告诉我“这只是 R 的奇怪行为”,但还有其他概念吗?

【问题讨论】:

  • 因为当你做F & condition2时,R不会检查condition2,依赖规则F & something总是F。虽然我不确定,因为F & ("a"+1) 会引发错误(F && ("a"+1) 不会)。
  • 如果 AND 中的第一个值是假的,那么无论第二个值是什么,答案都是假的。但是如果第一个值为真,那么只有当第二个值也为真时 AND 才会为真,但由于缺少 (NA),因此无法判断表达式是真还是假。
  • @MrFlick 我刚刚编辑了我之前的评论。我补充说,但是,F & ("a"+1) 会抛出一个错误(我期望F)。所以R“看”condition2
  • 补充上面所说的,TRUE && something 始终是something
  • @StéphaneLaurent 那是因为& 的表达式仍然被评估,但它不是&& 因为那是“短路的”。所以&不一定会忽略第二个参数,它只是有足够的信息可以肯定地知道结果是什么。 NA & F 也返回 FALSE。

标签: r logical-operators na


【解决方案1】:

如果您有一个 AND (&) 语句并且其中一个值为假,那么另一个值是什么并不重要,答案将是假的。 NA 值意味着缺少一个值,但未观察到的值必须是真或假,无论哪种方式你都会得到假的。

但如果其中一个值为真,那么只有当第二个值也为真时,AND 才会为真。但是,在这种情况下,缺失值 (NA) 可能为真或假,因此无法确定表达式是否为真。因此,R 必须传播 NA 值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-03
    • 1970-01-01
    • 1970-01-01
    • 2020-05-01
    • 1970-01-01
    • 2015-04-23
    • 1970-01-01
    • 2013-06-11
    相关资源
    最近更新 更多