不正确*不正确等于真?

时间:2015-09-11 10:55:57

标签: r logical-operators

由于R的以下行为,我在代码中遇到了一些问题:

> F * F
[1] 0

> !T * !T
[1] TRUE

有人可以解释一下如何避免这种情况吗?

我需要乘以一些值并得到逻辑乘法的结果:

!first * !second * !third

如果所有值都是真的,我想得到一个“真”。

1 个答案:

答案 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。