R语言table1包生成表格p值列时代码及官方示例失效问题咨询
问题解决方案
根因说明
你运行官方示例无法生成p值列,是因为你安装的table1包为1.4.0及以上新版本,该版本已废弃旧版文档中使用的extra.col参数,导致原有代码逻辑失效。
两种可选修复方案
方案1:适配新版本代码(推荐)
无需变动包版本,仅需调整table1函数的参数写法,原有p值计算函数可保留不变,完整可运行代码如下:
library(table1) library(MatchIt) data(lalonde) lalonde$treat <- factor(lalonde$treat, levels=c(0, 1), labels=c("Control", "Treatment")) lalonde$married <- as.logical(lalonde$married == 1) lalonde$nodegree <- as.logical(lalonde$nodegree == 1) lalonde$race <- factor(lalonde$race, levels=c("white", "black", "hispan"), labels=c("White", "Black", "Hispanic")) pvalue <- function(x, ...) { y <- unlist(x) g <- factor(rep(1:length(x), times=sapply(x, length))) if (is.numeric(y)) { p <- t.test(y ~ g)$p.value } else { p <- chisq.test(table(y, g))$p.value } c("", sub("<", "<", format.pval(p, digits=3, eps=0.001))) } # 仅调整此处table1的参数写法即可 table1(~ age + race + married + nodegree + re74 + re75 + re78 | treat, data=lalonde, overall=F, render = render.default( extra.col = list(`P-value` = pvalue) ))
方案2:降级包版本适配旧代码
如果你希望直接运行官方旧示例的原始代码,可将table1包降级到1.3版本,执行以下代码后重启R会话,再运行你原有代码即可正常生成p值列:
# 未安装remotes包先执行 install.packages("remotes") remotes::install_version("table1", version = "1.3")
补充优化提示
如果生成的表格中p值显示为<0.001而非<0.001,可将pvalue函数中的<替换为<适配纯文本输出;如果分类变量存在期望频数小于5的情况,可将卡方检验替换为Fisher精确检验避免警告。
内容的提问来源于stack exchange,提问作者mgtrek
相关产品推荐
相关产品推荐

