运算符优先级是否解释了这些涉及数字与取反逻辑的乘法表达式的区别?
Does operator precedence explain the difference in these expressions involving multiplication of a numeric with a negated logical?
我有三个表达式,每个表达式都涉及与逻辑或其否定的乘法。这些逻辑和它们的否定表示指示变量,因此表达式被有条件地评估:
-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
我确信这与 operator precedence 和类型强制转换有关,但我不知道在 *
之后评估 !T
有何意义。
你说得对,这是关于运算符优先级的。正如 ?base::Syntax
(上面的 link)所述,!
的优先级低于所有算术运算符,因此第一个表达式等同于
(-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
我有三个表达式,每个表达式都涉及与逻辑或其否定的乘法。这些逻辑和它们的否定表示指示变量,因此表达式被有条件地评估:
-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
我确信这与 operator precedence 和类型强制转换有关,但我不知道在 *
之后评估 !T
有何意义。
你说得对,这是关于运算符优先级的。正如 ?base::Syntax
(上面的 link)所述,!
的优先级低于所有算术运算符,因此第一个表达式等同于
(-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