我试图编写一个相对简单的包装器来生成一些图形,但是无法弄清如何指定作为 ...
指定的分组变量的整洁评估,例如对变量进行细分但不区分分组的示例函数...
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.))
的代码? - FlorianGDaes_
中使用quo(...)
而不是quos(...)
,那么事情会正常工作,例如aes_(~value, color = quo_group)
。但也许您需要一些其他的分组变量列表? - aosmithquos
返回一个列表。因此,如果您只想使用从quos(...)
获得的1个元素列表中的第一个元素,则需要在aes_
中使用color = quo_group[[1]]
。 - aosmith