Programação funcional com dplyr

Procurando uma maneira mais eficiente / elegante de passar vários argumentos para um grupo usando avaliação não padrão em uma função usando dplyr. Não quero usar o operador ..., mas especificar as funções individualmente.

Meu caso de uso específico é uma função que pega um quadro de dados e cria um objeto ggplot com sintaxe mais simples. Aqui está um exemplo do código que eu quero automatizar com a minha função:

# create data frame
my_df <- data.frame(month = sample(1:12, 1000, replace = T),
                    category = sample(head(letters, 3), 1000, replace = T),
                    approved = as.numeric(runif(1000) < 0.5))

my_df$converted <- my_df$approved * as.numeric(runif(1000) < 0.5)

my_df %>%
  group_by(month, category) %>%
  summarize(conversion_rate = sum(converted) / sum(approved)) %>%
  ggplot + geom_line(aes(x = month, y = conversion_rate, group = category, 
  color = category))

Eu quero combinar esse group_by, resumir, ggplot e geom_line em uma função simples que eu possa alimentar um x, ye um grupo, e fazer com que ele execute todo o trabalho sujo sob o capô. Aqui está o que eu comecei a trabalhar:

# create the function that does the grouping and plotting
plot_lines <- function(df, x, y, group) {

  x <- enquo(x)
  group <- enquo(group)
  group_bys <- quos(!! x, !! group)

  df %>%
    group_by(!!! group_bys) %>%
    my_smry %>%
    ggplot + geom_line(aes_(x = substitute(x), y = substitute(y), 
    group = substitute(group), color = substitute(group)))
}

# create a function to do the summarization
my_smry <- function(x) {
  x %>% 
    summarize(conversion_rate = sum(converted) / sum(approved))
}

# use my function
my_df %>% 
  plot_lines(x = month, y = conversion_rate, group = category)

Eu sinto que o tratamento group_by é bastante deselegante: citarx egroup comenquo, então, citando-os com!! dentro de outra função de citaçãoquos, apenas para recolocá-los com!!! na próxima linha, mas é a única coisa que pude trabalhar. Existe uma maneira melhor de fazer isso?

Além disso, existe uma maneira de obter o ggplot para levar!! ao invés desubstitute? O que estou fazendo parece inconsistente.

questionAnswers(2)

yourAnswerToTheQuestion