Ich habe eine Situation überstanden, in der %>%
eine sehr überraschende Ausgabe ergibt, wenn sie mit !
kombiniert wird. Betrachten Sie den folgenden Code:Verwendung von! (oder irgendein logischer Operator) mit%>% (magrrittr) erzeugt eine unerwartete Ausgabe
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, nichts überraschend dort. Aber wenn ich versuche, es zu verkürzen %>%
seltsame Dinge mit dabei:
!is.na(x) %>% sum
[1] TRUE
TRUE
?? Nicht was ich erwartet habe - es sollte 20
sein.
Wenn ich die !
entfernen es gibt mir 0
wie erwartet:
> is.na(x) %>% sum
[1] 0
und wenn ich Klammern hinzufügen, funktioniert es:
> {!is.na(x)} %>% sum
[1] 20
und !
als Funktion der Behandlung funktioniert:
> is.na(x) %>% `!` %>% sum
[1] 20
Was ist !is.na(x) %>% sum
tun, und warum tut es gibt TRUE
eher als 20
zurück?
EDIT: Die anderen logischen Operatoren erzeugen ein ähnliches Verhalten:
> T&T %>% sum()
[1] TRUE
> {T&T} %>% sum()
[1] 1
> T|T %>% sum()
[1] TRUE
> {T|T} %>% sum()
[1] 1
'is.na (x)%>% \' \ '%>% sum' oder 'Negate (is.na) (x)%>% sum' – rawr
Oder in magrittr speak' is.na (x)%>% nicht%>% sum' –
@RichardScriven meine Lieblings-magrittr sprechen 'is_weakly_greater_than' für '> =' – rawr