如何在R-exams生成的PDF中纳入modelsummary回归表格?
问题原因与解决方案
问题原因
- Knitr配置差异:
exams2pdf默认未启用代码块的results='asis'选项,而modelsummary输出的是原生LaTeX代码,必须通过该选项让knitr直接将LaTeX代码插入最终TeX文件,否则会把代码本身作为普通文本输出。 - 编译流程逻辑不同:
exams2pdf对Rmd的处理链路和直接用knitr编译有区别,它会先生成TeX中间文件,若代码块未正确配置,会跳过LaTeX代码的解析步骤,直接保留原代码内容。
推荐解决方法
方法1:调整代码块选项
在调用modelsummary的代码块中,添加results='asis'(确保LaTeX代码被解析)和echo=FALSE(可选,隐藏代码块):
{r, results='asis', echo=FALSE} library(modelsummary) # 拟合回归模型 mod1 <- lm(mpg ~ disp, data = mtcars) mod2 <- lm(mpg ~ disp + hp, data = mtcars) # 生成LaTeX格式的多模型表格 modelsummary(list(mod1, mod2), output = "latex")
方法2:手动捕获并输出LaTeX代码
如果方法1无效,可手动捕获modelsummary的输出结果,用cat()直接输出LaTeX代码,确保被exams2pdf正确识别:
{r, results='asis', echo=FALSE} library(modelsummary) mods <- list(lm(mpg ~ disp, mtcars), lm(mpg ~ disp + hp, mtcars)) # 捕获LaTeX表格代码 tab_latex <- modelsummary(mods, output = "latex") # 输出代码到TeX文件 cat(tab_latex)
方法3:使用兼容性更稳定的包
若modelsummary仍存在适配问题,可改用R-exams支持更成熟的texreg或xtable包:
- 用
texreg输出多模型表格:
{r, results='asis', echo=FALSE} library(texreg) texreg(list(mod1, mod2), caption = "多回归模型结果", label = "tab:regression")
- 用
xtable输出单模型(多模型可手动合并或利用其多模型支持):
{r, results='asis', echo=FALSE} library(xtable) print(xtable(mod1, caption = "回归模型结果"), caption.placement = "top")
内容的提问来源于stack exchange,提问作者Florian Oswald
相关产品推荐
相关产品推荐

