2015-05-10 12 views
5

Czy można używać negacji w potoku dplyr?Negacja `!` W dplyr pipeline `%>%`

Np dla

df = data.frame(a = c(T,F,F), b = c(T,T,T)) 

mogę napisać

!df 

ale nie mogę napisać

df %>% ! 

(jak ! nie jest funkcją).

Bardzo często używam !is.na, ale nie jestem w stanie włączyć go do potoku.

Odpowiedz

10

Można użyć backticks wokół !

df %>% 
     `!` 
#  a  b 
#[1,] FALSE FALSE 
#[2,] TRUE FALSE 
#[3,] TRUE FALSE 

Dla !is.na

df$a[2] <- NA 
df %>% 
     is.na %>% 
     `!` 
#  a b 
#[1,] TRUE TRUE 
#[2,] FALSE TRUE 
#[3,] TRUE TRUE 
9

Zauważ, że operator rurociągów stosowane w dplyr jest importowany z magrittr więc dostęp do innych funkcji, należy użyć

library(magrittr) 

Zobacz stronę ?extact na liście wspólnych aliasów magrittr w obsłudze.

W tym przypadku not() jest zdefiniowany jako alias dla !

df %>% not 

Aby ułatwić zadzwoń! Is.na, można zdefiniować

not_ <- function(x, f) not(f(x)) 
df %>% not_(is.na)