Попытка написать относительно простую оболочку для создания некоторых графиков, но не могу понять, как указать аккуратную оценку группирующих переменных, указанных как ...
пример функции, которая фасетирует переменные, но не различает их группировкой ...
my_plot <- function(df = starwars,
select = c(height, mass),
...){
results <- list()
## Tidyeval arguments
quo_select <- enquo(select)
quo_group <- quos(...)
## Filter, reshape and plot
results$df <- df %>%
dplyr::filter(!is.na(!!!quo_group)) %>%
dplyr::select(!!quo_select, !!!quo_group) %>%
gather(key = variable, value = value, !!!quo_select) %>%
## Specify what to plot
ggplot(aes(value)) +
geom_histogram(stat = 'count') +
facet_wrap(~variable, scales = 'free', strip.position = 'bottom')
return(results)
}
## Plot height and mass as facets but colour histograms by hair_color
my_plot(df = starwars, select = c(height, mass), hair_color)
Отлично работает, но как отличить разные hair_color
? Обычно это делается в aes()
, но поскольку здесь используются результаты quos()
(т.е. quo_group
), я должен (я думаю) использовать вместо этого aes_()
my_plot <- function(df = starwars,
select = c(height, mass),
...){
results <- list()
## Tidyeval arguments
quo_select <- enquo(select)
quo_group <- quos(...)
## Filter, reshape and plot
results$df <- df %>%
dplyr::filter(!is.na(!!!quo_group)) %>%
dplyr::select(!!quo_select, !!!quo_group) %>%
gather(key = variable, value = value, !!!quo_select) %>%
## Specify what to plot, including colouring by the supplied ... groupings
ggplot(aes_(~value, colour = !!!quo_group)) +
geom_histogram(stat = 'count') +
facet_wrap(~variable, scales = 'free', strip.position = 'bottom')
return(results)
}
## Plot height and mass as facets but colour histograms by hair_color
my_plot(df = starwars, select = c(height, mass), hair_color)
Error in !quo_group : invalid argument type
Я не вижу или не могу тренироваться, прочитав несколько раз Программирование с dplyr, где я ' м иду не так.
Кто-нибудь может указать на мою ошибку / указать мне путь?
ggplot(aes(etc.))
? - person FlorianGD   schedule 14.06.2017quo(...)
вместоquos(...)
, тогда все работает нормально вaes_
а-ляaes_(~value, color = quo_group)
. Но, может быть, вам нужен список группирующих переменных для чего-то еще? - person aosmith   schedule 14.06.2017quos
возвращает список. Поэтому, если вы хотите использовать только первый элемент списка 1 элемента, полученного изquos(...)
, вам понадобитсяcolor = quo_group[[1]]
вaes_
. - person aosmith   schedule 14.06.2017quo_group[[1]]
делает свое дело, но, похоже, противоречит Программирование с dplyr : захват нескольких переменных документации. - person slackline   schedule 14.06.2017