R脚本for循环中gtsummary::tbl_regression输出未渲染至rmarkdown生成的Word文档
问题原因
gtsummary生成的tbl_regression对象默认print方法仅输出控制台纯文本格式,即便设置results='asis',knitr也无法将该格式解析为Word可识别的结构化表格。
解决方案
修改步骤
- 新增加载
flextable、knitr依赖包,flextable是gtsummary适配Word输出的核心组件 - 优化模型公式写法,避免
get()可能出现的环境变量调用异常 - 循环内输出表格时,先将
tbl_regression对象转为flextable格式,再通过knit_print()输出 - 表格输出后追加空行,避免多个表格格式粘连
修正后代码
Script 1
library(gtsummary) # 格式化模型输出 library(flextable) # 适配Word表格渲染 library(knitr) # 处理knitr输出逻辑 #' # 示例数据集 dataset = as.data.frame(cbind(Y1 = c(rep(0,10), rep(1,10)), Y2 = c(rep(0,5), rep(1,10), rep(0,5)), X = rnorm(20, 0, 1))) #' # 循环生成格式化输出 #+ Table1, results = 'asis' for(i in c("Y1", "Y2")){ fit = glm(reformulate("X", response = i), family = binomial, data = dataset) print(length(fit$residuals)) fit2 = fit %>% tbl_regression( exponentiate = TRUE, conf.level = 0.999, pvalue_fun = ~style_pvalue(.x, digits = 3), ) %>% bold_p(t = 0.01) %>% bold_labels() %>% italicize_levels() # 转flextable后输出 fit2 %>% as_flex_table() %>% knit_print() # 追加空行分隔表格 cat("\n\n") }
Script 2 无需修改,直接运行即可输出带表格的Word文档
#' # 输出Word文档 rmarkdown::render('C:\\Users ... Test.R', output_format = "word_document", output_dir = "C:\\Users ...")
内容的提问来源于stack exchange,提问作者Irene
相关产品推荐
相关产品推荐

