У меня есть три выражения, каждое из которых включает умножение на логическое или его отрицание. Эти логики и их отрицание представляют индикаторные переменные, так что выражения оцениваются условно:
-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
после *
.
!
как-2*3*(!T) + 5*7*T
тоже работает. - person thelatemail   schedule 02.11.2016codetools::showTree(quote( -2*3*(!T) + 5*7*T ))
противcodetools::showTree(quote( -2*3*!T + 5*7*T ))
, если вы знакомы с кодом Lisp. - person thelatemail   schedule 02.11.2016