【发布时间】:2015-05-10 16:27:42
【问题描述】:
是否可以在 dplyr 管道中使用否定?
例如
df = data.frame(a = c(T,F,F), b = c(T,T,T))
我会写
!df
但我不会写
df %>% !
(因为! 不是函数)。
特别是,我经常使用!is.na,但我无法将其合并到管道中。
【问题讨论】:
是否可以在 dplyr 管道中使用否定?
例如
df = data.frame(a = c(T,F,F), b = c(T,T,T))
我会写
!df
但我不会写
df %>% !
(因为! 不是函数)。
特别是,我经常使用!is.na,但我无法将其合并到管道中。
【问题讨论】:
您可以在! 周围使用backticks
df %>%
`!`
# a b
#[1,] FALSE FALSE
#[2,] TRUE FALSE
#[3,] TRUE FALSE
对于!is.na
df$a[2] <- NA
df %>%
is.na %>%
`!`
# a b
#[1,] TRUE TRUE
#[2,] FALSE TRUE
#[3,] TRUE TRUE
【讨论】:
请注意,dplyr 中使用的管道运算符是从 magrittr 导入的,因此要访问其他功能,请使用
library(magrittr)
请参阅?extact 页面以获取常见的 magrittr 友好别名列表。
在这种情况下,not() 被定义为 ! 的别名
df %>% not
为了更容易调用 !is.na,您可以定义
not_ <- function(x, f) not(f(x))
df %>% not_(is.na)
【讨论】: