Я пишу пользовательскую функцию, в которой я хочу, чтобы один из аргументов принимал список переменных. Мне удалось использовать rlang
и некоторое элементарное понимание ...
, чтобы правильно прочитать этот список в функции. Но я не знаю, как назначить этот список в качестве аргумента другой функции (например, dplyr::group_by
). Я полностью воспроизводимый пример ниже вместе с конечным результатом, который я хочу.
# loading the needed libraries
library(dplyr)
library(rlang)
library(datasets)
# defining the custom function
prac.fn <- function(data, vars = ..., measure) {
# getting the dataframe ready
df <-
dplyr::select(.data = data,
!!rlang::enquo(vars),
!!rlang::enquo(measure))
# print to see if all variables are included
print(head(df))
# summarize by specified grouping variables
df %>%
dplyr::group_by(.data = ., c(!!rlang::enquo(vars))) %>%
dplyr::summarise(mean = mean(!!rlang::enquo(measure)))
}
# use the function (doesn't work)
prac.fn(data = mtcars,
vars = c(cyl, am),
measure = wt)
#> cyl am wt
#> Mazda RX4 6 1 2.620
#> Mazda RX4 Wag 6 1 2.875
#> Datsun 710 4 1 2.320
#> Hornet 4 Drive 6 0 3.215
#> Hornet Sportabout 8 0 3.440
#> Valiant 6 0 3.460
#> Error in mutate_impl(.data, dots): Column `c(c(cyl, am))` must be length 32 (the number of rows) or one, not 64
# output I want
mtcars %>%
dplyr::group_by(cyl, am) %>%
dplyr::summarise(mean = mean(wt))
#> # A tibble: 6 x 3
#> # Groups: cyl [?]
#> cyl am mean
#> <dbl> <dbl> <dbl>
#> 1 4.00 0 2.94
#> 2 4.00 1.00 2.04
#> 3 6.00 0 3.39
#> 4 6.00 1.00 2.76
#> 5 8.00 0 4.10
#> 6 8.00 1.00 3.37
Создано 17 февраля 2018 г. с помощью пакета reprex (v0.2.0).