Der Versuch, einen relativ einfachen Wrapper zu schreiben, um einige Plots zu erstellen, kann aber nicht herausfinden, wie sauber Auswertung der Gruppierungsvariablen als ...
angegebene Beispiel-Funktion, die Facetten Variablen spezifiziert, aber nicht durch Gruppierung zu unterscheiden. ..Tidy Auswertung Programmierung und 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)
Groß es funktioniert, aber wie zwischen verschiedenen hair_color
zu unterscheiden? Normalerweise wird diese innerhalb aes()
getan, aber da dies mit den Ergebnissen von quos()
(dh quo_group
) Ich (glaube ich)
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
statt aes_()
verwenden kann ich nicht sehen, oder trainieren Sie jetzt Programming with dplyr mehrmals gelesen zu haben wo ich falsch liege.
Kann jemand meinen Fehler aufzeigen/mir den Weg zeigen?
In Ihrer zweiten Funktion, warum haben Sie zwei Zeilen mit 'ggplot (aes (etc.))'? – FlorianGD
Wenn Sie 'quo (...)' anstelle von 'quos (...)' verwenden, dann funktionieren die Dinge in 'aes_' a la' aes_ (~ value, color = quo_group) '. Aber vielleicht brauchen Sie eine Liste von Gruppierungsvariablen für etwas anderes? – aosmith
Oh, ich sehe, 'quos' gibt eine Liste zurück. Wenn Sie also nur das erste Element der 1-Element-Liste verwenden möchten, das von 'quos (...)' kommt, benötigen Sie 'color = quo_group [[1]]' in 'aes_'. – aosmith