【问题标题】:DRY when enumerating variables in R for multiple operations in a pipeline为管道中的多个操作枚举 R 中的变量时 DRY
【发布时间】:2019-04-26 11:57:54
【问题描述】:

我想知道是否有一种 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

【问题讨论】:

标签: r coding-style dry tidyverse


【解决方案1】:

是的,它与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
...

【讨论】:

    【解决方案2】:

    我想你要找的是:

    library(tidyverse)
    vars <- quos(Sepal.Width, Species)
    
    iris %>% arrange(!!!vars) %>% select(!!!vars)
    

    我假设您的意思是select 而不是filter,因为iris %&gt;% arrange(Sepal.Width, Species) %&gt;% filter(Sepal.Width, Species) 引发错误

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多