You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

modelsummary结合kableExtra导出LaTeX代码报错求助

modelsummary结合kableExtra导出LaTeX代码报错求助

我太懂你这种“老代码突然跑不通”的烦躁了!之前modelsummary默认用kableExtra作为渲染引擎,咱们导出LaTeX后直接用kable_styling调整样式毫无压力,但现在它默认换成tinytable了,就出现类型不兼容的问题——你拿到的是tinytable类对象,而kable_styling只认kable对象或者数据框,自然会报错说没法转成数据框。

给你两个实用的解决思路,按需选就行:

思路1:让modelsummary直接输出kableExtra兼容的对象

最简单的办法就是在调用modelsummary时,明确指定输出格式为"kableExtra",而不是直接输出"latex",这样得到的对象就能直接传给kableExtra处理,完美沿用你之前的工作流:

library(modelsummary)
library(kableExtra)
library(tidyverse)

# 假设你的data数据框已准备好
model1 <- lm(y1 ~ x, data)
model2 <- lm(y2 ~ x, data)

models <- list(model1, model2)

# 关键:指定output为"kableExtra",得到kable对象
table <- modelsummary(models, output = "kableExtra")

# 继续用kable_styling调整样式
latex_table <- table %>%
  kable_styling(latex_options = "basic")

# 输出LaTeX代码
cat(latex_table)

思路2:把tinytable对象转成kableExtra能处理的格式

如果你需要先对tinytable生成的表格做一些操作,再用kableExtra调整样式,可以先把tinytable转成数据框,再重新生成kable对象:

library(modelsummary)
library(kableExtra)
library(tidyverse)

model1 <- lm(y1 ~ x, data)
model2 <- lm(y2 ~ x, data)

models <- list(model1, model2)

# 先得到tinytable对象
tt_table <- modelsummary(models, output = "tinytable")

# 转成数据框,再生成LaTeX格式的kable对象
df_table <- as.data.frame(tt_table)
kable_table <- kable(df_table, format = "latex")

# 再用kable_styling处理
latex_table <- kable_table %>%
  kable_styling(latex_options = "basic")

cat(latex_table)

第一种思路更省心,完全贴合你之前的使用习惯;第二种适合有额外tinytable操作需求的场景,你可以根据自己的情况选~

备注:内容来源于stack exchange,提问作者Linus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 10:38:11