说a=1; b=2
。为什么(a|b)==1
会产生TRUE
而(a|b)==2
FALSE
?如果其中一个(或两个)变量匹配,那么返回TRUE
的简单方法是什么?
答案 0 :(得分:2)
如果您查看TRUE
和FALSE
评估的数值,则分别为1
和0
as.numeric(c(TRUE, FALSE))
#[1] 1 0
答案 1 :(得分:2)
|
比较两个布尔值。
在这种情况下,(a|b)
本身会返回TRUE
,因为将0
转换为FALSE
,其他所有内容都转换为TRUE
,从而强制转换为布尔值。
来自?base::Logic
:
但是,数字和复杂矢量将被强制转换为逻辑值 零为假,所有非零值均为真。原始载体是 在没有任何强制的情况下处理!,&,|和xor,与这些运算符 按位应用(所以!是1s补码)。
==
不会这样做;它会将TRUE
强制转换为数字形式1
,因此1==2
会返回FALSE
。
来自?base::Comparison
:
如果两个参数是不同类型的原子矢量,则一个是 强迫对方的类型,优先顺序(递减) 是字符,复数,数字,整数,逻辑和原始。