#r #dplyr #magrittr
#r #dplyr #magrittr
Вопрос:
Я столкнулся с проблемой, используя magrittr %>%
where при обертывании создается неожиданный вывод lhs
!()
. Например, я ожидал, что выходные данные этих двух строк будут идентичными.
sum( !( c(1,2,3,4) == 1 ) )
!( c(1,2,3,4) == 1 ) %>% sum()
Однако первая строка возвращает «3», как и ожидалось, тогда как вторая строка возвращает «FALSE». Почему это так?
Ответ №1:
Проблема заключается в приоритете, оберните (..)
вокруг первого выражения, и оно ведет себя так, как ожидалось.
(!(c(1,2,3,4) == 1)) %>% sum
#[1] 3
Вы можете найти таблицу приоритетов ?Syntax
, где вы можете видеть, что %any%
имеет более высокий приоритет, чем !
.
Ответ №2:
С %>%
помощью negate () мы можем использовать negate ( !
) также в цепочке
library(magrittr)
( c(1,2,3,4) == 1 ) %>%
`!` %>%
sum
#[1] 3
Или используйте aliases
из magrittr
c(1, 2, 3, 4) %>%
equals(1) %>%
not %>%
sum
#[1] 3