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

R 排除管道中向量中的多个值,r,functional-programming,magrittr,R,Functional Programming,Magrittr,我正在寻找一种更优雅的方法,从管道中的向量中排除多个值。下面的代码实现了我需要的功能,但是非常难看。你能想出一个替代方案吗 values_to_exclude <- c("b", "d") letters[1:5] %>% .[ !(. %in% values_to_exclude) ] # quite ugly 值\u至\u不包括% [!(.%在%的值中_至_排除)]#相当难看 这不使用purr,但是像这样的东西怎

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

values_to_exclude <- c("b", "d")
        
letters[1:5] %>%
    .[ !(. %in% values_to_exclude) ] # quite ugly
值\u至\u不包括%
[!(.%在%的值中_至_排除)]#相当难看

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

values_to_exclude <- c("b", "d")
letters[1:5] %>% setdiff(., values_to_exclude)
# [1] "a" "c" "e"
值到排除%setdiff(,值到排除)
#[1]“a”“c”“e”

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

values_to_exclude <- c("b", "d")
letters[1:5] %>% setdiff(., values_to_exclude)
# [1] "a" "c" "e"
值到排除%setdiff(,值到排除)
#[1]“a”“c”“e”

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

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

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

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

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

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]

因为情人眼里出西施。。。我认为,如果您要引用过去的代码,那么这更容易解释。不过,我认为其他一些解决方案更高效、更简洁。

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

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

因为情人眼里出西施。。。我认为,如果您要引用过去的代码,那么这更容易解释。不过,我认为其他一些解决方案更高效、更简洁。

好提示。像这样更好的字母[1:5]]>%setdiff(值从\u到\u排除)很棒的提示。像这样的字母[1:5]]>%setdiff(values_to_exclude)更好,我同意代码美观是主观的,但对我来说,这个特定的解决方案似乎很难理解。我同意代码美是主观的,但对我来说,这个特殊的解决方案似乎很难理解。感谢你的努力。一定要用管道吗
setdiff(字母[1:5],值从_到_排除)
为什么在您的用例中不起作用?它肯定会起作用。我通常创建“字母[1:5]”部分作为较长管道块的一部分,但字母[1:5]>%setdiff(值从\u到\u排除)肯定会起作用。它必须与管道一起使用吗
setdiff(字母[1:5],值从_到_排除)
为什么在您的用例中不起作用?它肯定会起作用。我通常创建“字母[1:5]”部分作为较长管道块的一部分,但字母[1:5]>%setdiff(值从u到u排除)肯定会起作用。有一个特定的
magrittr
操作符相当于
%in%
字母[1:5]>%extract(!is_in(,值从u到u排除))
。有一个特定的
magrittr
运算符相当于%:
字母[1:5]>%提取(!is_in(,value_to_exclude))