R语言中gmodels CrossTable循环结果无法存入列表问题
解决gmodels::CrossTable结果无法存入列表的问题
问题根源
gmodels::CrossTable()默认仅在控制台打印交叉表内容,不会主动返回交叉表对象。你编写的gtable()函数没有返回值,因此赋值给gtable_list的元素全为NULL。
解决方案
修改自定义函数,让它返回CrossTable的计算结果;若不想循环时刷屏,可关闭自动打印功能。
修改后的完整代码
# 待遍历的特征列 features <- c("v1", "v2", "v3" ... "vn") # 调用gmodels进行交叉表分析的函数(修改后) gtable <- function(x, y, xlab, ylab){ # 关闭自动打印,返回交叉表对象 gmodels::CrossTable(x, y, digits=1, prop.r=TRUE, prop.c=FALSE, prop.t=FALSE, prop.chisq=FALSE, chisq=FALSE, format="SPSS", dnn=c(xlab, ylab), print.it=FALSE) } # 将循环结果存入列表 gtable_list <- list() for (i in features){ gtable_list[[i]] <- gtable(x=df[[i]], y=df$ISMIN, xlab=var_lab(df[i]), ylab=var_lab(df$ISMIN)) } # 按需打印指定交叉表 print(gtable_list[["v1"]])
关键修改点
- 添加返回逻辑:函数最后一行直接返回
CrossTable()的结果(R函数默认返回最后一行的输出),无需额外return()语句,也可以显式用return()明确返回。 - 关闭自动打印:增加
print.it=FALSE参数,避免循环时大量输出刷屏;后续需要查看结果时,手动调用print()打印列表中的元素即可。
内容的提问来源于stack exchange,提问作者GSA
相关产品推荐
相关产品推荐

