How do you pass multiple arguments to a function inside a function?

Viewed 57

So I'm trying to make cross tables for multi-response questions with both frequency and counts using expss. I am able to get the result I need by running the following code:

library(expss)
set.seed(1998)
expss_output_viewer()
# Example data set
x <- c("A","B","C")
area <-  rep(x,each = 10)
p <-  sample(c(0,1),30,replace = T)
q <-  sample(c(0,1),30,replace = T)
r <-  sample(c(0,1),30,replace = T)
mrdata <-  data.frame(area,p,q,r)
# Creating the Table
mrdata %>%
  tab_significance_options(keep = "none", sig_labels = NULL, subtable_marks = "greater", mode = "append") %>%
  tab_cols(total(), mdset(p,q,r)) %>%
  tab_cells(area) %>%
  tab_stat_cases(label = "cases") %>%
  tab_stat_cpct_responses(label = "%",total_row_position = "none") %>% 
  tab_pivot(stat_position = "inside_columns") %>% set_caption("Table 1")

However, seeing as this is a lot of code for a single table, I wanted to wrap it into a function to be able to create the tables quickly and without much clutter. I've tried doing it like this:

mrtable <-  function(input,rowvar,colvars,capt ="Table 1") {
  input %>%
    tab_significance_options(keep = "none", sig_labels = NULL, subtable_marks = "greater", mode = "append") %>%
    tab_cols(total(), mdset(colvars)) %>%
    tab_cells(rowvar) %>%
    tab_stat_cases(label = "cases") %>%
    tab_stat_cpct_responses(label = "%",total_row_position = "none") %>% 
    tab_pivot(stat_position = "inside_columns") %>% set_caption(capt)
}
mrtable(input = mrdata,colvars = c(p,q,r),rowvar = area)

Running the function above returns:

Error: 'cro': all variables should be of the same length or length 1.

I can't figure out why it fails. Any help would be appreciated.

EDIT: got it to work :

mrtable <-  function(input,rowvar,...,capt ="Table 1") {
  input %>%
    tab_significance_options(keep = "none", sig_labels = NULL, subtable_marks = "greater", mode = "append") %>%
    tab_cols(total(), mdset(...)) %>%
    tab_cells(rowvar) %>%
    tab_stat_cases(label = "cases") %>%
    tab_stat_cpct_responses(label = "%",total_row_position = "none") %>% 
    tab_pivot(stat_position = "inside_columns") %>% set_caption(capt)
}
mrtable(input = mrdata,rowvar = area,p,q,r,capt = "Tab")
0 Answers
Related