在 R 中为管道中的多个操作枚举变量时 DRY

DRY when enumerating variables in R for multiple operations in a pipeline

我想知道是否有 DRY 方法来编写以下管道:

library(tidyverse)
data(iris)
iris %>% arrange(Sepal.Width, Species) %>% select(Sepal.Width, Species)

这非常有效,但如果需要更改代码,我有两个地方需要编辑。

有没有办法重写代码,使变量在管道中只列出一次?

我希望有一种方法可以存储变量列表 v 然后调用:

iris %>% arrange(v) %>% select(v)

我尝试使用 quoteSymNon Standard Evaluation 的许多其他函数来存储变量列表,但无济于事。


所有这些答案对这个问题都没有帮助:

r - how to use a variable in a variable

Using a variable to refer to another variable in R?

R expression variable list

r - how to use a variable in a variable

是的,它是 Pass a vector of variable names to arrange() in dplyr...

的副本
library(tidyverse)
data(iris)
varList <- c("Sepal.Width","Species")
iris %>% arrange_(.dots=varList) %>% select_(.dots=varList)

...输出:

> iris %>% arrange_(.dots=varList) %>% select_(.dots=varList)
    Sepal.Width    Species
1           2.0 versicolor
2           2.2 versicolor
3           2.2 versicolor
4           2.2  virginica
5           2.3     setosa
6           2.3 versicolor
7           2.3 versicolor
8           2.3 versicolor
9           2.4 versicolor
10          2.4 versicolor
11          2.4 versicolor
12          2.5 versicolor
13          2.5 versicolor
14          2.5 versicolor
15          2.5 versicolor
16          2.5  virginica
17          2.5  virginica
18          2.5  virginica
19          2.5  virginica
20          2.6 versicolor
21          2.6 versicolor
22          2.6 versicolor
23          2.6  virginica
24          2.6  virginica
...

我想你要找的是:

library(tidyverse)
vars <- quos(Sepal.Width, Species)

iris %>% arrange(!!!vars) %>% select(!!!vars)

我假设你的意思是 select 而不是你的问题所述 filter 因为 iris %>% arrange(Sepal.Width, Species) %>% filter(Sepal.Width, Species) 会抛出错误