【问题标题】:How OR operator works [duplicate]OR运算符的工作原理[重复]
【发布时间】:2017-05-26 10:21:58
【问题描述】:

我是 R 新手。我想确认我对这个概念的理解是否正确。

在使用逻辑运算符 OR 时,我无法理解以下输出。当第二个元素都为 0 时,案例 1 的结果为“假”,而当这些数字 > 0 时,结果为“真”。这是因为 0 总是被认为是“FAlse”,而在这种情况下,这两个值都是“false”吗?

案例 1

v <- c(3,0,TRUE,2+2i)
t <- c(4,0,FALSE,2+3i)
print(v|t)
#[1]  TRUE FALSE  TRUE  TRUE

案例 2

v <- c(3,0,TRUE,2+2i)
t <- c(3,0,FALSE,2+3i)
print(v|t)
#[1]  TRUE FALSE  TRUE  TRUE

【问题讨论】:

标签: r logical-operators


【解决方案1】:

您正在对向量 v 和 t 进行元素逻辑比较。并且由于任何大于 0 的数字都计算为 TRUE 如果转换为逻辑,您将获得此输出。 (也请注意下面的评论)

您可以在后台考虑这个事件(对于案例 1):

   as.logical(3) | as.logical(4)
   as.logical(0) | as.logical(0)
            TRUE | TRUE
as.logical(2+2i) | as.logical(2+2i)

产生我们的输出:

TRUE FALSE TRUE TRUE

【讨论】:

  • 不仅数字 > 0,还有 isTRUE(as.logical(-5))isTRUE(as.logical(-Inf))
【解决方案2】:

R 认为 TRUE 为 1,FALSE 为 0。你的理解是正确的。你有一个元素检查,在v[2]=0t[2]=0的情况下,R理解:0 | 0因此为0,即FALSE OR FALSE = FALSE

您可以通过将 0 个输入之一(v[2]=0 和 t[2]=0)更改为 !=0 来检查这一点。

作为评论: 您必须考虑到您不能使用c() 创建具有不同类的变量。在这种情况下,R 将您提供的所有输入解释为复数。我的意思是将TRUE 转换为1+0i,将FALSE 转换为0+0i(检查: print(v) &gt;v [1] -3+0i 0+0i 1+0i 0+2i)

【讨论】:

    猜你喜欢
    • 2019-07-04
    • 2015-08-04
    • 1970-01-01
    • 2011-04-18
    • 1970-01-01
    • 2017-03-20
    • 1970-01-01
    • 2020-12-24
    • 1970-01-01
    相关资源
    最近更新 更多