使用带有 kableExtra 格式的 R "tables" 包的字幕

Captions using R "tables" package with kableExtra formatting

我正在尝试向 table 包 "tables" 中的 "tables" 输出添加标题,然后使用 kableExtra 进行额外格式化。

虽然其他线程找到了通过使用额外的 LaTeX 代码 (Caption not appearing for LaTeX table when knitting using Hmisc LaTeX Function and Hmisc::latex not printing caption w/ tabular object) 添加标题 headers 的方法,但这些解决方案似乎与最近的 toKable() 功能不兼容,该功能允许使用 kableExtra 进行额外格式化。

通常会在使用 kable(x, caption = "mycaption") 期间添加说明。但是如下生成时会报错(Error in toKable(., booktabs = T) : 'table' must be a 'tabular' object.)。似乎如果我尝试通过 latex() 添加任何其他格式,例如添加标题,object 类型将发生变化,使其无法与 toKable() 函数一起使用。任何关于如何将 toKable() 与已通过 latex() 传递的附加 LaTeX 格式一起使用的见解将不胜感激!

library(tables)
library(magrittr)
library(kableExtra)

 tabular((Species + 1) ~ (n=1) + Format(digits=2)* (Sepal.Length + Sepal.Width)*(mean + sd), data=iris) %>%
   latex(., options = list(tabular = "longtable",
                           toprule = "\caption{Table 1. My favorite caption}\\\toprule")) %>%
   toKable(., booktabs = T)

传递给 toKable() 之前的 LaTeX 输出:

\begin{longtable}{lccccc}
\caption{Table 1. My favorite caption}\\toprule
 &  & \multicolumn{2}{c}{Sepal.Length} & \multicolumn{2}{c}{Sepal.Width} \ 
Species  & n & mean & sd & mean & \multicolumn{1}{c}{sd} \ 
\hline
setosa  & $\phantom{0}50$ & .01$ & [=12=].35$ & .43$ & [=12=].38$ \
versicolor  & $\phantom{0}50$ & .94$ & [=12=].52$ & .77$ & [=12=].31$ \
virginica  & $\phantom{0}50$ & .59$ & [=12=].64$ & .97$ & [=12=].32$ \
All  & 0$ & .84$ & [=12=].83$ & .06$ & [=12=].44$ \
\hline 
\end{longtable}

在对代码进行了一些修改并试图了解每个代码的工作原理之后...我尝试将选项列表直接粘贴到 toKable 中。这似乎有效,并且 toKable 似乎与 latex().

共享相似的选项
tabular((Species + 1) ~ (n=1) + Format(digits=2)* (Sepal.Length + Sepal.Width)*(mean + sd),
        data=iris) %>%
  toKable(., booktabs = T,
          options = list(tabular = "longtable",
                                          toprule = "\caption{My favorite caption}\\\toprule"))

这会正确地输出以下 LaTex 代码,如上所示:

\begin{longtable}{lccccc}
\caption{Table 1. My favorite caption}\\toprule
 &  & \multicolumn{2}{c}{Sepal.Length} & \multicolumn{2}{c}{Sepal.Width} \ \cmidrule(lr){3-4}\cmidrule(lr){5-6}
Species  & n & mean & sd & mean & \multicolumn{1}{c}{sd} \ 
\midrule
setosa  & $\phantom{0}50$ & .01$ & [=11=].35$ & .43$ & [=11=].38$ \
versicolor  & $\phantom{0}50$ & .94$ & [=11=].52$ & .77$ & [=11=].31$ \
virginica  & $\phantom{0}50$ & .59$ & [=11=].64$ & .97$ & [=11=].32$ \
All  & 0$ & .84$ & [=11=].83$ & .06$ & [=11=].44$ \
\bottomrule 
\end{longtable}

然后可以根据需要在报告或其他地方显示 LaTeX 代码。在转换为 PDF 的 Rmarkdown 文档中,它看起来像(记得调用 tableskableExtra 包):

感谢您的分享,我正在寻找这个。我可以按上面的方式添加标题,但它仍然显示为正常 body 文本,并且在我呈现 Latex 文档时没有 table 引用。所以万一对其他人有用

对我有用的是使用小插图中的 latexTable 函数:

   tab1<-latexTable(tabular((Species + 1) ~ (n=1) + Format(digits=2) 
      (Sepal.Length + Sepal.Width)*(mean + sd),data=iris), caption = "Iris sepal data", label = "sepals")

然后把它当作一个 kable object 并且可以添加 headers,等等

    tab1  %>% add_header_above(c("Blah" = 1, "Bing" = 2, "Bong" = 2)) %>% save_kable(paste0(resultspath,"tab1.tex"), float = FALSE)