Did I write this function in modern tidyeval notation?

It's been some time since I last wrote tidyeval code, and since I remember that the API was evolving quite quickly, I want to make sure I'm not missing anything. Look at this function:

plot_predictions <- function(dataframe, x_var, y_var, y_pred, y_lwr, y_upr, color_var, 
                             plot_title, target_days = NULL){
  
  x_var  <- enquo(x_var)
  y_var  <- enquo(y_var)
  y_pred <- enquo(y_pred)
  y_lwr  <- enquo(y_lwr)
  y_upr  <- enquo(y_upr)
  color_var <- enquo(color_var)
  
  p <- ggplot(dataframe, aes(x = !! x_var, y = !! y_var, color = !! color_var)) +
    geom_point() +
    geom_line(aes(y = !! y_pred)) +
    geom_line(aes(y = !! y_lwr), linetype = "dashed") +
    geom_line(aes(y = !! y_upr), linetype = "dashed") +
    labs(title = plot_title)
  
  if (!rlang::is_null(target_days)){
    y_max <- max(select(dataframe, !! y_upr))*1.1
    day_2 <- target_days$day_2
    day_3 <- target_days$day_3
    p <- p +
      annotate(geom = "vline",
               x = c(day_2, day_3),
               xintercept = c(day_2, day_3),
               linetype = c("dashed", "solid")) +
      annotate(geom = "text",
               label = c(as.character(day_2), as.character(day_3)),
               x = c(day_2, day_3),
               y = c(y_max, y_max),
               angle = 90, 
               vjust = 1)
  }  
  return(p)
}

There are six variables which need to be generic across different dataframes, and which I capture with enquo, then use with the !! operator. Is this still the right procedure? Or should I do something different?

PS I didn't provide a full reprex to keep the post short (the function works already, it's not like I need to fix a bug). However, if you prefer I can add one.

1 Like

In each case where you have enquo(x) and later !!x, you can now instead remove enquo(x) and replace !!x with {{x}}. This newer curly curly operator quotes and unquotes in a single operation.

5 Likes

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.