【问题标题】:why && returns logical value for first elements? [duplicate]为什么 && 返回第一个元素的逻辑值? [复制]
【发布时间】:2020-05-24 09:52:19
【问题描述】:

我们有如下向量:

c1<-c(10,40,28)
c2<-c(50,55,44)

这段代码:

c1>25&&c2>25

返回我理解的 FALSE(&& 始终返回一个标量值,如果遇到 FALSE 值,则不会检查向量中的其余值)

但是在这个例子中:

c3<-c(40,10,28)
c4<-c(50,15,44)

对于此代码:

c3>25&&c4>25

它返回 TRUE。我不明白为什么。我读了 && 和 ||只检查第一个元素,但对我来说这没有意义。值 40 和 50(那些第一个元素)返回 TRUE,但对:10 和 15 返回 FALSE,对我来说,输出应该是 FALSE,因为其余的向量值(除了第一个元素)不是 TRUE,整个输出应该是 FALSE。这是误导。

当我比较上述 2 个向量时 - 我想返回 FALSE 而不是 TRUE,因为它们不满足条件 (>25)。我如何比较它们以返回 FALSE 而不是 TRUE )(对我来说 && 在这种情况下没用)

【问题讨论】:

  • 试试any&amp;
  • any(c3&gt;25 &amp; c4&gt;25) 还是返回TRUE,不知道我这里写得好不好

标签: r


【解决方案1】:

正如您已经了解的那样,x &amp;&amp; y 只检查xy 的第一个元素

c(TRUE, FALSE) && c(TRUE, FALSE)

评估为TRUE,因为唯一测试的是TRUE &amp;&amp; TRUE

另一方面:

c(TRUE, TRUE) & c(TRUE, FALSE)

评估为c(TRUE, FALSE),因为&amp; 测试所有配对。

如果您想知道所有配对是否为TRUE,我们可以使用:

all(c(TRUE, TRUE) & c(TRUE, FALSE))

最初的计算结果为:

all(c(TRUE, FALSE))

然后到:

FALSE

【讨论】:

    【解决方案2】:

    如果你读过?Logic,就会清楚地提到:

    & 和 && 表示逻辑 AND 和 |和 ||表示逻辑或。较短的形式执行元素比较的方式与算术运算符大致相同。较长的形式从左到右评估,仅检查每个向量的第一个元素。仅在确定结果之前进行评估。

    &amp;&amp; 仅检查c3c4 中的第一个值,因为那是TRUE,它以TRUE 返回输出。

    您的用例可能需要的是:

    all(c3 > 25 & c4 > 25)
    #[1] FALSE
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-27
      • 1970-01-01
      • 2019-02-02
      • 1970-01-01
      • 2018-11-30
      相关资源
      最近更新 更多