Search code examples
rdplyrrlangtidyeval

Passing string as an argument in R


On a fairly regular basis I want to pass in strings that function as arguments in code. For context, I often want a section where I can pass in filtering criteria or assumptions that then flow through my analysis, plots, etc. to make it more interactive.

A simple example is below. I've seen the eval/parse solution, but it seems like that makes code chunks unreadable. Is there a better/cleaner/shorter way to do this?

column.names <- c("group1", "group2") #two column names I want to be able to toggle between for grouping
select.column <- group.options[1] #Select the column for grouping

DataTable.summary <- 
  DataTable %>% 
  group_by(select.column) %>% #How do I pass that selection in here? 
  summarize(avg.price = mean(SALES.PRICE))

Solution

  • Well this is just a copy-paste from the tidyverse website: link:(https://dplyr.tidyverse.org/articles/programming.html#programming-recipes).

    my_summarise <- function(df, group_var) {
      group_var <- enquo(group_var)
      print(group_var)
      df %>%
        group_by(!! group_var) %>%
        summarise(a = mean(a))
    }
    my_summarise(df, g1)
    #> <quosure>
    #> expr: ^g1
    #> env:  global
    #> # A tibble: 2 x 2
    #>      g1     a
    #>   <dbl> <dbl>
    #> 1     1  2.5 
    #> 2     2  3.33
    

    But I think i illustrates your problem. I think what you really want to do is like the code above, i.e. create a function.