排除管道中向量中的多个值

Exclude multiple values in a vector in a pipe

我正在寻找一种更优雅的方法来从管道中的向量中排除多个值。下面的代码实现了我所需要的,但是非常难看。你能想到一个替代方案吗?

values_to_exclude <- c("b", "d")
        
letters[1:5] %>%
    .[ !(. %in% values_to_exclude) ] # quite ugly

这不使用 purrr,但是像这样的东西怎么样:

values_to_exclude <- c("b", "d")
letters[1:5] %>% setdiff(., values_to_exclude)
# [1] "a" "c" "e"

magrittr 软件包带有一整套方便的功能。例如,extract:

library(magrittr)
letters[1:5] %>%
    extract(!(. %in% values_to_exclude))
[1] "a" "c" "e"

但是,在这种情况下,您可以以相同的方式使用 base::subset

letters[1:5] %>%
   subset(!(. %in% values_to_exclude))

想提供另一个 base R 解决方案:

letters[1:5][!letters[1:5] %in% values_to_exclude]

因为旁观者眼中有美...我认为如果您要参考过去的代码,这更容易理解。不过,我认为其他一些解决方案更高效、更简洁。