我试图在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。
答案 0 :(得分:3)
阅读页面help('|')
的内容(我的重点):
数字和复数向量将被强制为逻辑值,并且 零为假,所有非零值为真。
因此,发生的情况是4
和6
都被强制转换为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
并没有那么吸引人,因此结果也很奇怪。
答案 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)