suppressPackageStartupMessages(library("dplyr"))
packageVersion("dplyr")

# define our parameters
group_nm <- as.name("am")
num_nm <- as.name("hp")
den_nm <- as.name("cyl")
derived_nm <- as.name(paste0(num_nm, "_per_", den_nm))
mean_nm <- as.name(paste0("mean_", derived_nm))
count_nm <- as.name("group_count")

# apply a parameterized pipeline using rlang::!!
mtcars %>%
  group_by(!!group_nm) %>%
  mutate(!!derived_nm := !!num_nm/!!den_nm) %>%
  summarize(
    !!mean_nm := mean(!!derived_nm),
    !!count_nm := n()
  ) %>%
  ungroup() %>%
  arrange(!!group_nm)


# wrap some dplyr methods
nms <- c("add_count", "add_tally", "all_equal", "anti_join",
         "arrange", "as.tbl", "bind_cols", "bind_rows", "collect",
         "compute", "copy_to", "count", "distinct", "filter",
         "full_join", "group_by", "group_indices", "inner_join",
         "is.tbl", "left_join", "mutate", "rename", "right_join",
         "select", "semi_join", "summarise", "summarize", "tally",
         "tbl", "transmute", "ungroup")
env <- environment()
for(fname in nms) {
  assign(fname, 
         wrapr::bquote_function(getFromNamespace(fname, ns = "dplyr")),
         envir = env)
}



# apply a parameterized pipeline using bquote
mtcars %>%
  group_by(.(group_nm)) %>%
  mutate(.(derived_nm) := .(num_nm)/.(den_nm)) %>%
  summarize(
    .(mean_nm) := mean(.(derived_nm)),
    .(count_nm) := n()
  ) %>%
  ungroup() %>%
  arrange(.(group_nm))


WinVector/seplyr documentation built on Aug. 26, 2022, 12:01 p.m.