pass function arguments to both dplyr and ggplot

Tidy evaluation is now fully supported in ggplot2 v3.0.0 so it’s not necessary to use aes_ or aes_string anymore. library(rlang) library(tidyverse) diamond_plot <- function (data, group, metric) { quo_group <- sym(group) quo_metric <- sym(metric) data %>% group_by(!! quo_group) %>% summarise(price = mean(!! quo_metric)) %>% ggplot(aes(x = !! quo_group, y = !! quo_metric)) + geom_col() } … Read more

dplyr: How to use group_by inside a function?

For programming, group_by_ is the counterpart to group_by: library(dplyr) mytable <- function(x, …) x %>% group_by_(…) %>% summarise(n = n()) mytable(iris, “Species”) # or iris %>% mytable(“Species”) which gives: Species n 1 setosa 50 2 versicolor 50 3 virginica 50 Update At the time this was written dplyr used %.% which is what was originally … Read more

Multiple plots in for loop ignoring par

Here is one way to do it with cowplot::plot_grid. The plot_duo function uses tidyeval approach in ggplot2 v3.0.0 # install.packages(“ggplot2”, dependencies = TRUE) library(rlang) library(dplyr) library(ggplot2) library(cowplot) plot_duo <- function(df, plot_var_x, plot_var_y) { if (is.character(plot_var_x)) { print(‘character column names supplied, use ensym()’) plot_var_x <- ensym(plot_var_x) } else { print(‘bare column names supplied, use enquo()’) plot_var_x … Read more