Версия dplyr 0.7 включает значительную переработку программирования с помощью dplyr. Я внимательно прочитал этот документ и пытаюсь понять, как он повлияет на мое использование dplyr.
Вот распространенная идиома, которую я использую при создании функций отчетности и агрегирования с помощью dplyr:
my_report <- function(data, grouping_vars) {
data %>%
group_by_(.dots=grouping_vars) %>%
summarize(x_mean=mean(x), x_median=median(x), ...)
}
Здесь grouping_vars
— это вектор строк.
Мне нравится эта идиома, потому что я могу передавать векторы строк из других мест, скажем, из файла или реактивного пользовательского интерфейса приложения Shiny, но это также не так уж плохо для интерактивной работы.
Однако в новом программировании с виньеткой dplyr я не вижу примеров того, как что-то подобное можно сделать с новым dplyr. Я вижу только примеры того, как передача строк больше не является правильным подходом, и вместо этого я должен использовать квазуры.
Я рад принять квазуры, но как именно мне перейти от строк к квазурам, ожидаемым dplyr здесь? Кажется невозможным ожидать, что вся экосистема R будет предоставлять квазуры для dplyr — много раз мы будем получать строки, и их придется преобразовывать.
Вот пример, показывающий, что вы теперь должны делать, и почему моя старая идиома не работает:
library(dplyr)
grouping_vars <- quo(am)
mtcars %>%
group_by(!!grouping_vars) %>%
summarise(mean_cyl=mean(cyl))
#> # A tibble: 2 × 2
#> am mean_cyl
#> <dbl> <dbl>
#> 1 0 6.947368
#> 2 1 5.076923
grouping_vars <- "am"
mtcars %>%
group_by(!!grouping_vars) %>%
summarise(mean_cyl=mean(cyl))
#> # A tibble: 1 × 2
#> `"am"` mean_cyl
#> <chr> <dbl>
#> 1 am 6.1875