Uso de ! (ou qualquer operador lógico) com%>% (magrittr) produz saída inesperada
Eu me deparei com uma situação em que%>%
produz resultados surpreendentes quando combinados com!
. Considere o seguinte código:
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
Ok, nada de surpreendente lá. Mas se eu tentar encurtá-lo usando%>%
coisas estranhas acontecem:
!is.na(x) %>% sum
[1] TRUE
TRUE
?? Não é o que eu esperava - deveria ser20
.
Se eu remover o!
isso me dá0
como esperado:
> is.na(x) %>% sum
[1] 0
e se eu adicionar colchetes, funciona:
> {!is.na(x)} %>% sum
[1] 20
e tratando!
como uma função funciona:
> is.na(x) %>% `!` %>% sum
[1] 20
O que é!is.na(x) %>% sum
fazendo, e por que ele retornaTRUE
ao invés de20
?
EDITAR: Os outros operadores lógicos produzem comportamento semelhante:
> T&T %>% sum()
[1] TRUE
> {T&T} %>% sum()
[1] 1
> T|T %>% sum()
[1] TRUE
> {T|T} %>% sum()
[1] 1