79153544

Date: 2024-11-03 20:07:44
Score: 1.5
Natty:
Report link

Fun problem!

I made some slight changes. For example, I added data %>% to code1 and code2 because I can't remember how to concatenate that programmatically. I prefer rlang to base R's metaprogramming. You can read the metaprogramming section of Advanced R for a deep dive or this PDF cheat sheet for a quick intro.

I used dplyr::enexpr, replacing eval(substitute(...)). You also mistyped some of the column names, e.g. states which should have been state.

Lastly, I used rlang::eval_tidy to run the code.

I haven't checked that the output is correct, however. I'll leave that to you, and please let me know!

apply_conditional_summary <- function(data, code1, code2) {
  
  if ("category" %in% colnames(data)) {
    result <- enexpr(code2)
  } else {
    result <- enexpr(code1)
  }
  
  return(rlang::eval_tidy(result))
}

apply_conditional_summary(
  df2, 
  data %>% group_by(date, state) %>% summarise(units = mean(units), total_amt = sum(amount), .groups = "drop"),
  data %>% group_by(date, state, category) %>% 
    summarise(units = mean(units), total_amt = sum(amount), .groups = "drop") %>%
    group_by(date, state) %>%
    mutate(share = total_amt / sum(total_amt)) %>%
    ungroup()
)
Reasons:
  • RegEx Blacklisted phrase (2.5): please let me know
  • Long answer (-1):
  • Has code block (-0.5):
  • Low reputation (0.5):
Posted by: gabagool