3

我有三个表达式,每个表达式都涉及与逻辑或其否定的乘法。这些逻辑及其否定表示指示变量,因此表达式是有条件地求值的:

-2*3*!T + 5*7*T
5*7*T + -2*3*!T 
(-2*3*!T) + 5*7*T

我希望上述内容会产生相同的结果。然而:

> -2*3*!T + 5*7*T
[1] 0          # unexpected!
> 5*7*T + -2*3*!T 
[1] 35
> (-2*3*!T) + 5*7*T
[1] 35

我确信这与运算符优先级和类型强制有关,但我无法弄清楚!T*.

4

1 回答 1

4

你说得对,这是关于运算符优先级的。如?base::Syntax(您在上面链接)所述,!其优先级低于所有算术运算符,因此第一个表达式等效于

(-2*3)*!(T + 5*7*T)  

!(因为必须在最终乘法完成之前评估包含的表达式)或

-6*!(36)  # T coerced to 1 in numeric operations

或者

-6*FALSE  # non-zero numbers coerced to TRUE in logical operations

或者

-6*0      # FALSE coerced to 0 in numeric operations
于 2016-11-01T23:47:29.487 回答