我想知道是否有一种DRY方法可以编写以下管道:
library(tidyverse)
data(iris)
iris %>% arrange(Sepal.Width, Species) %>% select(Sepal.Width, Species)
这非常有效,但如果需要更改代码,我有两个地方可以编辑。
是否有任何方法可以重写代码,使变量在管道中只列出一次
我希望有一种方法可以存储变量列表v
,然后调用:
iris %>% arrange(v) %>% select(v)
我尝试过使用quote
、Sym
和非标准评估的许多其他函数来存储变量列表,但都无济于事。
所有这些答案对这个问题都没有帮助:
r-如何在变量中使用变量
使用一个变量引用R中的另一个变量?
R表达式变量列表
r-如何在变量中使用变量
我想你想要的是:
library(tidyverse)
vars <- quos(Sepal.Width, Species)
iris %>% arrange(!!!vars) %>% select(!!!vars)
我假设你的意思是select
,而不是filter
,因为iris %>% arrange(Sepal.Width, Species) %>% filter(Sepal.Width, Species)
抛出了一个错误
是的,它是将变量名向量传递到dplyr中的arrange((的副本。。。
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
...