在 dplyr 管道 `%>%` 中否定 `!`
Negation `!` in a dplyr pipeline `%>%`
是否可以在 dplyr 管道中使用否定?
例如
df = data.frame(a = c(T,F,F), b = c(T,T,T))
我会写
!df
但是我不会写
df %>% !
(因为 !
不是函数)。
特别是,我经常使用 !is.na
,但我无法将其合并到管道中。
请注意,dplyr 中使用的管道运算符是从 magrittr
导入的,因此要访问其他功能,请使用
library(magrittr)
请参阅 ?extact
页面以获取常见的 magrittr 友好别名列表。
在这种情况下 not()
被定义为 !
的别名
df %>% not
为了更容易调用!is.na,您可以定义
not_ <- function(x, f) not(f(x))
df %>% not_(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 管道中使用否定?
例如
df = data.frame(a = c(T,F,F), b = c(T,T,T))
我会写
!df
但是我不会写
df %>% !
(因为 !
不是函数)。
特别是,我经常使用 !is.na
,但我无法将其合并到管道中。
请注意,dplyr 中使用的管道运算符是从 magrittr
导入的,因此要访问其他功能,请使用
library(magrittr)
请参阅 ?extact
页面以获取常见的 magrittr 友好别名列表。
在这种情况下 not()
被定义为 !
df %>% not
为了更容易调用!is.na,您可以定义
not_ <- function(x, f) not(f(x))
df %>% not_(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