2015-05-10 10 views
5

È possibile utilizzare la negazione nella pipeline dplyr?Negazione `!` In una pipeline dplyr `%>%`

per esempio per

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

posso scrivere

!df 

ma non può scrivere

df %>% ! 

(come ! non è una funzione).

In particolare, utilizzo lo !is.na molto, ma non sono in grado di incorporarlo nelle pipeline.

risposta

10

È possibile utilizzare backticks intorno !

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

Per !is.na

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

Nota che l'operatore tubazioni utilizzato in dplyr è importata da magrittr quindi per accedere alle altre funzioni, utilizzare

library(magrittr) 

vedere la pagina ?extact per un elenco di alias comuni magrittr-friendly.

In questo caso not() è definito come un alias per !

df %>% not 

Per rendere più semplice per chiamare! Is.na, è possibile definire

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