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))
。