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

问题描述

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

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]

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