使用符号或“ |”在r

时间:2018-08-20 09:18:59

标签: r

我试图在R中使用'或'运算符。 但是,它的行为不符合预期。

(4|6)==1
#TRUE
#expected: FALSE

(4|6)==6
#FALSE
#expected: TRUE

6 %in% c(4,6)
#TRUE

后者工作正常。

我将使用列表版本,但是为什么or运算符的行为与它的行为相同? 如果我问一个数字是4还是6,我希望4或6给我TRUE。但是,只有1为TRUE。

3 个答案:

答案 0 :(得分:3)

阅读页面help('|')的内容(我的重点):

  

数字和复数向量将被强制为逻辑值,并且   零为假,所有非零值为真

因此,发生的情况是46都被强制转换为TRUE,然后计算它们的析取。

遵循这些示例。

(4|6)
#[1] TRUE

(0|1)
#[1] TRUE

(0|0)
#[1] FALSE

最后一个等价于FALSE|FALSE,这是 only 的析取式为FALSE的唯一方式。

这个问题要问的是

的结果
(4|6) == 1
#[1] TRUE

将非零4和非零6强制为各自的逻辑值之后,该值与

相同
(TRUE|TRUE) == 1
#[1] TRUE

答案 1 :(得分:2)

OR或|是逻辑运算符。因此,最好在逻辑运算中使用它。 人类语言中的6 %in% c(4,6)变成了这样的问题:

此向量中是否为6?,答案为TRUE

但是关于(4|6)==6 很难解释它。 由于括号具有最高优先级,因此问题为4 or 6,结果为TRUE。然后TRUE == 6是错误的。 TRUE被认为是1的整数。 但是TRUE == 6并没有那么吸引人,因此结果也很奇怪。

  1. 确保操作优先级正确
  2. 确保对正确的操作数使用正确的运算符。

答案 2 :(得分:1)

逻辑运算符的返回值为TRUE(1)或FALSE(0),因此您只需询问逻辑运算符是否为true。因此,4|6从技术上询问是否存在值。然后它返回TRUE,因为4是一个值。之后,您比较TRUE==6。将TRUE作为值1表示不是True,因此您返回FALSE。 (请参见您的第一个表达式,因为TRUE==1为TRUE,所以它返回TRUE)

如果要询问它是否为6,则必须写(4==6|6==6)