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

