【问题标题】:Captions using R "tables" package with kableExtra formatting使用带有 kableExtra 格式的 R“tables”包的字幕
【发布时间】:2019-04-02 16:36:56
【问题描述】:

我正在尝试为 R 中“tables”包的表格输出添加标题,然后使用 kableExtra 进行其他格式化。

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

通常会在使用kable(x, caption = "mycaption") 时添加标题。但是,当它如下生成时,会发生错误(Error in toKable(., booktabs = T) : 'table' must be a 'tabular' object.)。如果我尝试通过latex() 添加任何其他格式,例如添加标题,则对象类型将发生变化,使其无法与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$ & $5.01$ & $0.35$ & $3.43$ & $0.38$ \\
versicolor  & $\phantom{0}50$ & $5.94$ & $0.52$ & $2.77$ & $0.31$ \\
virginica  & $\phantom{0}50$ & $6.59$ & $0.64$ & $2.97$ & $0.32$ \\
All  & $150$ & $5.84$ & $0.83$ & $3.06$ & $0.44$ \\
\hline 
\end{longtable}

【问题讨论】:

    标签: r formatting caption kableextra


    【解决方案1】:

    在修改了一些代码并尝试了解每个代码的工作原理之后...我尝试将选项列表直接粘贴到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$ & $5.01$ & $0.35$ & $3.43$ & $0.38$ \\
    versicolor  & $\phantom{0}50$ & $5.94$ & $0.52$ & $2.77$ & $0.31$ \\
    virginica  & $\phantom{0}50$ & $6.59$ & $0.64$ & $2.97$ & $0.32$ \\
    All  & $150$ & $5.84$ & $0.83$ & $3.06$ & $0.44$ \\
    \bottomrule 
    \end{longtable}
    

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

    【讨论】:

      【解决方案2】:

      感谢您的分享,我正在寻找这个。我可以像上面一样添加标题,但是当我渲染 Latex 文档时,它仍然显示为正常的正文文本并且没有表格引用。所以以防万一对其他人有用

      对我有用的是使用小插图中的 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 对象并可以添加标题等

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-08-25
        • 2021-06-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-17
        • 2018-07-08
        • 1970-01-01
        相关资源
        最近更新 更多