R/dplyr_multi_summ.R

multi_summ <- function(..., fun, prefix) {
  pars <- as.list(match.call()[-1])
  vars <- pars[names(pars)==""]
  funs  <- pars[["fun"]]
  eval <-
    lapply(vars,
           function(var)
             lazyeval::interp(~ a %>% b, a = as.name(var), b=funs[[1]])
    )


  vars %<>% as.character
  if(any(names(pars)=="prefix")) vars <- paste0(prefix,as.character(vars))
  setNames(eval, vars )
}

summarize_by2 <- function(..., fun, prefix) {
  pars <- as.list(match.call()[-1])
  vars <- pars[names(pars)==""]
  funs  <- pars[["fun"]]
  eval <- lapply(vars, function(var) paste(var, "%>%", funs[[1]]) )

  vars %<>% as.character
  if(any(names(pars)=="prefix")) vars <- paste0(prefix,as.character(vars))
  setNames(eval, vars )


  ## example
  iris %>%
    summarize_by2(df=.,Petal.Length, Sepal.Length, fun=sum(.))

  iris %>%
    group_by(Species) %>%
    summarize(
      !!!summarize_by2(Petal.Length, Sepal.Length, fun=mean(.), prefix="mean_"),
      !!!summarize_by2(Petal.Length, Sepal.Length, fun=mean(.), prefix="sum_")
    )




  iris %>%
    group_by(Species) %>%
    summarize_(
      .dots = c(
        multi_summ(Petal.Length, Sepal.Length, fun=sum(.), prefix="sum_"),
        multi_summ(Petal.Length, Sepal.Length, fun=mean(.), prefix="mean_")
      )
    )






}
elo2zero/oddsandsods documentation built on May 16, 2019, 3:04 a.m.