在dplyr管道`%>%`中否定`!`

Pio*_*dal 9 r dplyr

是否可以在dplyr管道中使用否定?

例如

df = data.frame(a = c(T,F,F), b = c(T,T,T))
Run Code Online (Sandbox Code Playgroud)

我可以写

!df
Run Code Online (Sandbox Code Playgroud)

但我不能写

df %>% !
Run Code Online (Sandbox Code Playgroud)

(因为!不是一个功能).

特别是,我使用!is.na了很多,但我无法将其合并到管道中.

akr*_*run 14

你可以backticks在周围使用!

 df %>%
       `!`
 #      a     b
 #[1,] FALSE FALSE
 #[2,]  TRUE FALSE
 #[3,]  TRUE FALSE
Run Code Online (Sandbox Code Playgroud)

对于 !is.na

 df$a[2] <- NA
 df %>% 
      is.na %>% 
      `!`
 #       a    b
 #[1,]  TRUE TRUE
 #[2,] FALSE TRUE
 #[3,]  TRUE TRUE
Run Code Online (Sandbox Code Playgroud)


MrF*_*ick 10

请注意,dplyr中使用的管道运算符是从中导入的,magrittr以便访问其他函数,使用

library(magrittr)
Run Code Online (Sandbox Code Playgroud)

请参阅该?extact页面以获取常见的magrittr友好别名列表.

在这种情况下not()被定义为别名!

df %>% not
Run Code Online (Sandbox Code Playgroud)

为了更容易调用!is.na,你可以定义

not_ <- function(x, f) not(f(x))
df %>% not_(is.na)
Run Code Online (Sandbox Code Playgroud)