如何在modelsummary()中添加来自kable()的参数,输出为kableExtra

问题描述

我最近从对 this question 的回答中发现了 R 包 modelsummarymodelsummary 创建的汇总表的输出似乎可以属于 kable_knitr 类,它可以从 kableExtra 输入其他函数,例如 kable_styling

但是,我被困在如何从函数 kable()modelsummary() 函数中指定其他选项的值。一种显而易见的方法获取 data.frame 输出,然后将其输入到 kable 中。有没有更好的选择(这样我就可以避免修复 data.frame 输出

我特别在寻找 kable() 选项、escape=F(在乳胶输出中插入希腊字母 - 参见 this)和 booktabs=T

一个可重复的例子:

x=rnorm(100)
mod1=arima(x,order = c(1,1))
modelsummary(mod1,output = 'kableExtra',coef_rename = c('ar1'='$x_{t-1}$','ma1'='$\\epsilon_{t-1}$')) %>% 
  kable_styling(latex_options = 'HOLD_position')

在上表中,我正在尝试将变量重命名为数学样式,如果名称按原样给出,这将适用于 kable()

解决方法

... 省略号会自动向前推送到 kbl 函数。像 escape 这样的有效参数可以直接传递给 modelsummary

请注意,由于 output 参数文档的“后处理”注释中解释的原因,我更喜欢在后处理函数之前直接指定我需要的输出格式,否则 kableExtra默认准备一个 HTML 表格:

library(kableExtra)
library(modelsummary)
x=rnorm(100)
mod1=arima(x,order = c(1,1))

modelsummary(
  mod1,output = "latex",coef_rename = c('ar1'='$x_{t-1}$','ma1'='$\\epsilon_{t-1}$'),escape = FALSE)
\begin{table}[H]
\centering
\begin{tabular}[t]{lc}
\toprule
  & Model 1\\
\midrule
$x_{t-1}$ & 0.337\\
 & (0.368)\\
$\epsilon_{t-1}$ & -0.490\\
 & (0.335)\\
intercept & 0.007\\
 & (0.068)\\
\midrule
Num.Obs. & 100\\
AIC & 267.6\\
BIC & 278.0\\
Log.Lik. & -129.808\\
\bottomrule
\end{tabular}
\end{table}

另请注意,modelsummary 已经在内部调用了一次 kable_styling,将 kable_styling 添加到 kableExtra 生成的乳胶表有时会产生奇怪的结果,因为 {{1} } 将在表中嵌套表。 (注意:我计划就此向 kableExtra 提交错误修正。)

kableExtra
data.frame(a = 1:2,b = 2:3) %>%
  kbl("latex") %>%
  kable_styling() %>% 
  kable_styling() %>%
  kable_styling()