Использование! (или любой логический оператор) с%>% (magrittr) производит неожиданный вывод
Я столкнулся с ситуацией, когда%>%
производит очень неожиданный результат в сочетании с!
, Рассмотрим следующий код:
x <- c(1:20)
y <- !is.na(x)
> y
[1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
> sum(Y)
[1] 20
Хорошо, ничего удивительного там нет. Но если я попытаюсь сократить его, используя%>%
происходят странные вещи:
!is.na(x) %>% sum
[1] TRUE
TRUE
?? Не то, что я ожидал - это должно быть20
.
Если я удалю!
это дает мне0
как и ожидалось:
> is.na(x) %>% sum
[1] 0
и если я добавлю скобки, это работает:
> {!is.na(x)} %>% sum
[1] 20
и лечение!
как работает функция:
> is.na(x) %>% `!` %>% sum
[1] 20
Что такое!is.na(x) %>% sum
делает, и почему он возвращаетсяTRUE
скорее, чем20
?
РЕДАКТИРОВАТЬ: Другие логические операторы производят похожее поведение:
> T&T %>% sum()
[1] TRUE
> {T&T} %>% sum()
[1] 1
> T|T %>% sum()
[1] TRUE
> {T|T} %>% sum()
[1] 1