[R] Creating a simple function

Duncan Murdoch murdoch@dunc@n @end|ng |rom gm@||@com
Fri Sep 20 19:59:46 CEST 2019


On 20/09/2019 11:30 a.m., Zachary Lim wrote:
> Hi,
> 
> I'm trying to create a simple function that takes a dataframe as its only argument. I've been using gmodels::CrossTable, but it requires a lot of arguments, e.g.:
> 
> #this runs fine
> CrossTable(data$col1, data$col2, prop.chisq = FALSE, prop.c = FALSE, prop.t = FALSE, format = "SPSS")
> 
> Moreover, I wanted to make it compatible with piping, so I decided to create the following function:
> 
> ctab <- function(data) {
>    CrossTable(data[,1], data[,2], prop.chisq = FALSE, prop.c = FALSE, prop.t = FALSE, format = "SPSS")
> }
> 
> When I try to use this function, however, I get the following error:
> 
> #this results in 'Error: Must use a vector in `[`, not an object of class matrix.'
> data %>% select(col1, col2) %>% ctab()
> 
> I tried searching online but couldn't find much about that error (except for in specific and unrelated cases). Moreover, when I created a very simple dataset, it turns out there's no problem:
> 
> #this runs fine
> data.frame(C1 = c('x','y','x','y'), C2 = c('a','a','b','b')) %>% ctab()
> 
> 
> Is this a problem with my function or the data? If it's the data, why does directly calling CrossTable work?

Presumably  data %>% select(col1, col2)  isn't giving you a dataframe. 
However, you haven't given us a reproducible example, so I can't tell 
you what it's doing.  But that's where you should look.

Duncan Murdoch



More information about the R-help mailing list