Выпуск 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 app, но это также не так уж плохо для интерактивной работы.
Однако в новом программировании с dplyr vignette я не вижу примеров того, как что-то подобное можно сделать с помощью нового dplyr. Я вижу только примеры того, как передаваемые строки больше не являются правильным подходом, и вместо этого я должен использовать quosures.
Я рад принять quosures, но как именно я получаю от строк до quosures, ожидаемых здесь dplyr? Не представляется возможным ожидать, что вся экосистема R обеспечит quosures 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