magrittr 管道的 rhs returns FALSE 当 lhs 被放置在 !()
rhs of magrittr pipe returns FALSE when lhs is placed in !()
我在使用 magrittr %>%
时遇到了一个问题,当 lhs
包含在 !()
中时会产生意外的输出。例如,我希望这两行的输出相同。
sum( !( c(1,2,3,4) == 1 ) )
!( c(1,2,3,4) == 1 ) %>% sum()
然而,第一行 returns “3”,正如预期的那样,而第二行 returns “FALSE”。这是为什么?
问题优先,将 (..)
包裹在第一个表达式周围,它的行为符合预期。
(!(c(1,2,3,4) == 1)) %>% sum
#[1] 3
您可以在 ?Syntax
处找到优先级 table,其中您可以看到 %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
我在使用 magrittr %>%
时遇到了一个问题,当 lhs
包含在 !()
中时会产生意外的输出。例如,我希望这两行的输出相同。
sum( !( c(1,2,3,4) == 1 ) )
!( c(1,2,3,4) == 1 ) %>% sum()
然而,第一行 returns “3”,正如预期的那样,而第二行 returns “FALSE”。这是为什么?
问题优先,将 (..)
包裹在第一个表达式周围,它的行为符合预期。
(!(c(1,2,3,4) == 1)) %>% sum
#[1] 3
您可以在 ?Syntax
处找到优先级 table,其中您可以看到 %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