Próba napisania stosunkowo prostego opakowania w celu wygenerowania niektórych wykresów, ale nie można ustalić, jak określić uporządkowaną analizę zmiennych grupowania określonych jako ...
przykładowa funkcja, która oblicza zmienne, ale nie rozróżnia grup. ..Programowanie oceny tabelarycznej i ggplot2
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)
Świetnie się sprawdza, ale jak odróżnić różne hair_color
? Zwykle odbywa się to w ciągu aes()
ale ponieważ to jest z wykorzystaniem wyników quos()
(tj quo_group
) mam (chyba) używać aes_()
zamiast
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
nie widzę lub poćwiczyć po przeczytaniu Programming with dplyr kilka razy gdzie idę źle.
Czy ktoś może wskazać mój błąd/pokazać mi drogę?
W swojej drugiej funkcji, dlaczego masz dwie linie z 'ggplot (aes (etc.))? – FlorianGD
Jeśli użyjesz 'quo (...)' zamiast 'quos (...)', wtedy wszystko będzie działać poprawnie w 'aes_' a la' aes_ (~ value, color = quo_group) '. Ale może potrzebujesz listy zmiennych grupujących na coś innego? – aosmith
Och, widzę, 'quos' zwraca listę. Więc jeśli chcesz użyć tylko pierwszego elementu listy 1 elementów, które pochodzą z 'quos (...)', potrzebujesz 'color = quo_group [[1]]' w 'aes_'. – aosmith