由于R
的以下行为,我在代码中遇到了一些问题:
> F * F
[1] 0
> !T * !T
[1] TRUE
有人可以解释一下如何避免这种情况吗?
我需要乘以一些值并得到逻辑乘法的结果:
!first * !second * !third
如果所有值都是真的,我想得到一个“真”。
答案 0 :(得分:8)
这是运营商的优先事项。否定!
的优先级低于乘法。
列表按运算符优先级的降序给出here。此列表也可以与?Syntax
一起显示。
如果将TRUE
的否定置于括号中,则会获得更直观明确的结果:
(!TRUE) * (!TRUE)
[1] 0
在这种情况下,乘法将(!TRUE)
的每个实例强制转换为0,结果显然为0.
但是,操作!TRUE * !TRUE
等于!(TRUE * !TRUE)
,而!0
又等于FALSE
,因此(否定将零强制转换为逻辑TRUE
),结果等于mpr.dll
。
总而言之,可以说明问题的标题:
NOT(TRUE * NOT(TRUE))等于TRUE。