使用循环在 R 中创建多个交叉表

Using loops to create multiple crosstables in R

我有一个数据集,其中包含一个主要分类结果变量和多个分类暴露变量。我想为每个暴露变量生成一系列带有卡方检验的独立交叉表,我想知道是否有办法使用循环来做到这一点。

这基本上是我要完成的长版本:

    ctable(data$x1, data$y, chisq=T, useNA='no')
    ctable(data$x2, data$y, chisq=T, useNA='no')
    ctable(data$x3, data$y, chisq=T, useNA='no')

这是我第一次将它变成一个循环:

    for(i in c('x1', 'x2', 'x3')){
    ctables <- ctable(data[[i]], data$y, chisq=T, useNA='no')
    }
    ctables

当我 运行 时我没有得到任何错误,但它只是 returns 最后一个变量名的 ctable(在这个例子中,x3)。我错过了什么?

注意:我需要专门命名数据框(data$y 而不是仅仅说 y),因为我正在使用包含多个数据框的大型 SQL 数据库。

您可以使用 lapply() 代替:

ctables <- lapply(c('x1', 'x2', 'x3'), function(i) {
  ctable(data[[i]], data$y, chisq=T, useNA='no', dnn =c(i,"y"))
})

** 更新为 dnn=c(i,"y") 以在结果 ctable

中指定显式名称