Мне интересно, есть ли СУХОЙ способ написать следующую трубу:
library(tidyverse) data(iris) iris %>% arrange(Sepal.Width, Species) %>% select(Sepal.Width, Species)
Это прекрасно работает, но если необходимо изменить код, у меня есть два места для редактирования.
Есть ли способ переписать код таким образом, чтобы переменные перечислялись в конвейере только один раз?
Я надеюсь, что есть способ сохранитьсписок переменных v и затем вызов:
v
iris %>% arrange(v) %>% select(v)
Я пытался использовать quote, Sym и многие другие функции Нестандартная оценка , чтобысохранить список переменных безрезультатно.
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) выдает ошибку
select
filter
iris %>% arrange(Sepal.Width, Species) %>% filter(Sepal.Width, Species)
Да, это дубликат Передать вектор имен переменных в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 ...