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
相关产品推荐
相关产品推荐

