使用RMarkdown导出Word格式回归表格失败,寻求解决方法
嘿,我来帮你搞定RMarkdown导出Word回归表格的问题!你之前折腾memisc+pander没成功,大概率是Word渲染的兼容性问题,试试下面这几个亲测有效的方案:
方案1:用
flextable包(Word兼容性拉满,首推!) 这个包专门针对Word输出优化,步骤清晰还能自定义格式:
- 先用
broom把lm模型的结果转成整洁的数据框,方便合并多个模型 - 再用
flextable把数据框转成适配Word的表格
直接上代码:
# 先装包(如果没装的话) install.packages(c("broom", "flextable", "dplyr")) # 加载所需工具 library(broom) library(flextable) library(dplyr) # 拟合你的三个模型 lm0 <- lm(hp ~ wt, mtcars) lm1 <- lm(qsec ~ hp, mtcars) lm2 <- lm(qsec ~ wt, mtcars) # 把三个模型的结果合并,加上模型标识方便区分 model_results <- bind_rows( tidy(lm0) %>% mutate(model = "hp ~ wt"), tidy(lm1) %>% mutate(model = "qsec ~ hp"), tidy(lm2) %>% mutate(model = "qsec ~ wt") ) # 转换成flextable,还能自定义表头 ft <- flextable(model_results) %>% set_header_labels( term = "变量", estimate = "系数", std.error = "标准误", statistic = "t值", p.value = "P值", model = "模型" ) %>% autofit() # 自动适配列宽 # 在RMarkdown代码块里直接输出就行,knit成Word时会完美适配 ft
提示:生成的表格在Word里完全可编辑,格式不会乱,亲测比其他方法稳得多!
方案2:用
stargazer直接输出Word兼容格式 stargazer是做回归表格的老牌工具,只要指定对输出类型,就能适配Word:
install.packages("stargazer") library(stargazer) # 还是你的三个模型 lm0 <- lm(hp ~ wt, mtcars) lm1 <- lm(qsec ~ hp, mtcars) lm2 <- lm(qsec ~ wt, mtcars) # 如果是在RMarkdown里,把代码块的results设为'asis',用type='html'就能被Word识别 stargazer(lm0, lm1, lm2, type = "html")
或者你也可以直接导出成单独的Word文档:
stargazer(lm0, lm1, lm2, type = "text", out = "回归表格.doc")
方案3:修复你之前的memisc+pander方法
如果不想换工具,试试补全代码并设置pander的Word兼容选项:
install.packages(c("memisc", "pander")) library(memisc) library(pander) lm0 <- lm(hp ~ wt, mtcars) lm1 <- lm(qsec ~ hp, mtcars) lm2 <- lm(qsec ~ wt, mtcars) mt <- mtable(lm0, lm1, lm2) # 关键:设置pander输出适合RMarkdown的格式,这样Word才能正确解析 panderOptions("table.style", "rmarkdown") pander(mt)
最后必看的注意事项
- 一定要在RMarkdown的YAML头部正确设置输出格式:
--- title: "你的文档标题" output: word_document ---
- 如果还是有问题,把用到的包都更到最新版,旧版本可能存在Word渲染的bug!
内容的提问来源于stack exchange,提问作者Tito Sanz




