排除管道中向量中的多个值
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]
因为旁观者眼中有美...我认为如果您要参考过去的代码,这更容易理解。不过,我认为其他一些解决方案更高效、更简洁。
我正在寻找一种更优雅的方法来从管道中的向量中排除多个值。下面的代码实现了我所需要的,但是非常难看。你能想到一个替代方案吗?
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]
因为旁观者眼中有美...我认为如果您要参考过去的代码,这更容易理解。不过,我认为其他一些解决方案更高效、更简洁。