r - dplyr::group_by_ with character string input of several variable names -


i'm writing function user asked define 1 or more grouping variables in function call. data grouped using dplyr , works expected if there 1 grouping variable, haven't figured out how multiple grouping variables.

example:

x <- c("cyl") y <- c("cyl", "gear") dots <- list(~cyl, ~gear)  library(dplyr) library(lazyeval)   mtcars %>% group_by_(x)             # groups cyl mtcars %>% group_by_(y)             # groups cyl (not gear) mtcars %>% group_by_(.dots = dots)  # groups cyl , gear, want. 

i tried turn y same dots using:

mtcars %>% group_by_(.dots = interp(~var, var = list(y))) #error: is.call(expr) || is.name(expr) || is.atomic(expr) not true 

how use user-defined input string of > 1 variable names (like y in example) group data using dplyr?

(this question somehow related this one not answered there.)

no need interp here, use as.formula convert strings formulas:

dots = sapply(y, . %>% {as.formula(paste0('~', .))}) mtcars %>% group_by_(.dots = dots) 

the reason why interp approach doesn’t work expression gives following:

~list(c("cyl", "gear")) 

– not want. could, of course, sapply interp on y, similar using as.formula above:

dots1 = sapply(y, . %>% {interp(~var, var = .)}) 

but, in fact, can directly pass y:

mtcars %>% group_by_(.dots = y) 

the dplyr vignette on non-standard evaluation goes more detail , explains difference between these approaches.


Comments

Popular posts from this blog

angularjs - ADAL JS Angular- WebAPI add a new role claim to the token -

php - CakePHP HttpSockets send array of paramms -

node.js - Using Node without global install -