Ho attraversato una situazione in cui %>%
produce un output molto sorprendente se combinato con !
. Considera il seguente codice:Uso di! (o qualsiasi operatore logico) con%>% (magrittr) produce output imprevisto
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, niente di sorprendente lì. Ma se provo per accorciarlo utilizzando %>%
roba strana che accade:
!is.na(x) %>% sum
[1] TRUE
TRUE
?? Non è quello che mi aspettavo, dovrebbe essere 20
.
Se rimuovo il !
mi dà 0
come previsto:
> is.na(x) %>% sum
[1] 0
e se aggiungo tra parentesi funziona:
> {!is.na(x)} %>% sum
[1] 20
e trattare !
in funzione funziona:
> is.na(x) %>% `!` %>% sum
[1] 20
Cosa fa !is.na(x) %>% sum
e perché restituisce TRUE
anziché 20
?
EDIT: Gli altri operatori logici producono comportamento simile:
> T&T %>% sum()
[1] TRUE
> {T&T} %>% sum()
[1] 1
> T|T %>% sum()
[1] TRUE
> {T|T} %>% sum()
[1] 1
'is.na (x)%>% \' \ '%>% sum' o 'Negate (is.na) (x)%>% sum' – rawr
O in magrittr speak' is.na (x)%>% not%>% sum' –
@RichardScriven il mio preferito magrittr speak è 'is_weakly_greater_than' per '> =' – rawr