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

使用modelsummary+kableExtra生成LaTeX跨列表格时遇错误求助

问题解决方法

错误原因

modelsummary的output="latex_tabular"返回的是纯LaTeX字符串,而kableExtra::add_header_above是专门为kableExtra对象设计的工具,无法处理纯文本格式,因此会抛出argument is of length zero的错误。


方案一:用modelsummary原生功能生成跨列表头(推荐)

无需依赖kableExtra,直接用modelsummary的header参数添加跨列表头,同时输出纯tabular环境:

library(modelsummary)

# 构建模型
m1 <- lm(mpg ~ hp, data = mtcars)
m2 <- lm(mpg ~ drat, data = mtcars)
m3 <- lm(mpg ~ wt, data = mtcars)

# 生成带跨列表头的纯tabular表格
tab <- modelsummary(
  list("(A)"=m1, "(B)"=m2, "(C)"=m3),
  output = "latex_tabular",
  # header参数定义跨列表头:键是表头文本,值是跨列数
  header = list(c("Text" = 1, "More Text" = 1, "Some Other Text" = 2))
)

# 保存为tex文件
writeLines(tab, "tabular_output.tex")

方案二:保留kableExtra处理,再提取tabular环境

如果一定要用add_header_above,可以先生成kableExtra对象,再转换为纯tabular文本:

library(modelsummary)
library(kableExtra)

# 构建模型
m1 <- lm(mpg ~ hp, data = mtcars)
m2 <- lm(mpg ~ drat, data = mtcars)
m3 <- lm(mpg ~ wt, data = mtcars)

# 生成kableExtra对象并添加跨列表头
tab_kable <- modelsummary(
  list("(A)"=m1, "(B)"=m2, "(C)"=m3),
  output = "kableExtra"
) %>%
  add_header_above(c("Text"=1, "More Text"=1, "Some Other Text"=2))

# 转换为LaTeX字符串,提取仅含tabular的部分
latex_full <- as_latex(tab_kable)
tabular_only <- gsub(".*?(\\\\begin\\{tabular\\}.*?\\\\end\\{tabular\\}).*", "\\1", latex_full, perl = TRUE)

# 保存为tex文件
writeLines(tabular_only, "tabular_output.tex")

内容的提问来源于stack exchange,提问作者dameili

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 04:27:21