modelsummary与kableExtra兼容性问题:LaTeX表格生成故障
解决modelsummary与kableExtra版本兼容的LaTeX表格生成方案
以下是几个可行的解决思路,针对版本更新后出现的兼容性问题:
方案1:使用modelsummary原生LaTeX输出+手动样式调整
直接生成纯LaTeX代码,绕过kableExtra的调用,后续在LaTeX文档中或R内补充样式:
library(modelsummary) # 拟合示例模型 mod1 <- lm(mpg ~ cyl + hp, data = mtcars) mod2 <- lm(mpg ~ cyl + hp + wt, data = mtcars) # 生成纯LaTeX表格并保存 latex_code <- modelsummary(list(mod1, mod2), output = "latex", booktabs = TRUE) writeLines(latex_code, "model_table.tex")
- 若需要样式调整,可在LaTeX文档中添加
\usepackage{booktabs}(modelsummary默认依赖),或手动插入\centering、列宽设置等命令;也可通过modelsummary的fmt、coef_map、caption等参数预先调整表格内容。
方案2:降级到兼容的版本组合
回退到之前能正常运行的版本配对(比如modelsummary 1.x系列搭配kableExtra 1.x系列):
# 安装指定版本的modelsummary(示例版本,可根据需求替换) install.packages("https://cran.r-project.org/src/contrib/Archive/modelsummary/modelsummary_1.3.0.tar.gz", repos = NULL, type = "source") # 安装对应兼容的kableExtra版本 install.packages("https://cran.r-project.org/src/contrib/Archive/kableExtra/kableExtra_1.3.4.tar.gz", repos = NULL, type = "source")
- 可通过CRAN归档页面查询历史版本,找到匹配的稳定组合。
方案3:改用gt包作为中间层生成LaTeX
用modelsummary输出gt格式表格,再转成LaTeX,替代kableExtra:
library(modelsummary) library(gt) mod1 <- lm(mpg ~ cyl + hp, data = mtcars) mod2 <- lm(mpg ~ cyl + hp + wt, data = mtcars) # 生成gt表格并转为LaTeX gt_table <- modelsummary(list(mod1, mod2), output = "gt") gt_table %>% tab_options(table.width = pct(100), row.striping.include_table_body = TRUE) %>% as_latex() %>% writeLines("gt_model_table.tex")
- gt包支持丰富的样式自定义,转LaTeX后输出为纯LaTeX代码,无格式混杂问题。
方案4:手动提取模型结果+直接使用kableExtra
绕过modelsummary的接口,用broom提取模型系数后直接调用kableExtra生成LaTeX:
library(kableExtra) library(broom) library(dplyr) library(tidyr) mod1 <- lm(mpg ~ cyl + hp, data = mtcars) mod2 <- lm(mpg ~ cyl + hp + wt, data = mtcars) # 提取并整理模型结果 tidy1 <- tidy(mod1) %>% mutate(Model = "Model 1") tidy2 <- tidy(mod2) %>% mutate(Model = "Model 2") combined <- bind_rows(tidy1, tidy2) %>% pivot_wider(names_from = Model, values_from = c(estimate, std.error, p.value)) # 生成LaTeX表格 combined %>% kable(format = "latex", booktabs = TRUE, caption = "Regression Results") %>% kable_styling(latex_options = c("striped", "hold_position")) %>% writeLines("kable_model_table.tex")
- 这种方式完全手动控制数据流程,避免两个包的接口冲突,适合需要高度自定义的场景。
内容的提问来源于stack exchange,提问作者Hussain Hadah
相关产品推荐
相关产品推荐

