我在使用magrittr %>%
时遇到一个问题,当lhs
封装在!()
中时,会产生意外输出。例如,我期望这两行的输出是相同的。
sum( !( c(1,2,3,4) == 1 ) )
!( c(1,2,3,4) == 1 ) %>% sum()
然而,第一行返回"0";3〃;,而第二行返回"0";"假";。为什么?
问题优先,将(..)
包裹在第一个表达式周围,它的行为与预期一致。
(!(c(1,2,3,4) == 1)) %>% sum
#[1] 3
您可以在?Syntax
中找到优先级表,其中%any%
的优先级高于!
。
使用%>%
,我们也可以在链接时使用否定(!
(
library(magrittr)
( c(1,2,3,4) == 1 ) %>%
`!` %>%
sum
#[1] 3
或使用magrittr
中的aliases
c(1, 2, 3, 4) %>%
equals(1) %>%
not %>%
sum
#[1] 3