DRY при перечислении переменных в R для нескольких операций в конвейере - PullRequest
0 голосов
/ 24 ноября 2018

Мне интересно, есть ли СУХОЙ способ написать следующую трубу:

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 - какиспользовать переменную в переменной

Ответы [ 2 ]

0 голосов
/ 24 ноября 2018

Я думаю, что вы ищете:

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

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

Я предположил, что вы имели в виду select, а не filter, как ваш вопрос задан, так как iris %>% arrange(Sepal.Width, Species) %>% filter(Sepal.Width, Species) выдает ошибку

0 голосов
/ 24 ноября 2018

Да, это дубликат Передать вектор имен переменных вrange () в 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
...
...