Search code examples
rlatexkablekableextra

adding \label{} in kable kableExtra latex output


I am trying to create a latex formatted table in R with a \label{} option.

Something similar to

library(tidyverse)
library(knitr)
library(kableExtra)

data_frame(a = 1:3, b = 2:4) %>% 
  kable(align = 'c', format = 'latex') %>% 
  kable_styling(full_width = FALSE)

the resulting output is below, but i would like to add the \label{label_value} parameter to the latex table with a label_value I can define

\begin{table}[H]
\centering
\begin{tabular}{c|c}
\hline
a & b\\
\hline
1 & 2\\
\hline
2 & 3\\
\hline
3 & 4\\
\hline
\end{tabular}
\end{table}

I am trying to automatically create tables in R which I can save and then include in a latex document


Solution

  • If you put a caption in the call to kable, you'll get a label automatically, based on the name you give to the code chunk.
    If you are running it at the top level as in your example, it's kind of clunky: you need put the label in your caption, and you'll get two labels, yours and the auto-generated useless one. For example,

    library(tidyverse)
    library(knitr)
    library(kableExtra)
    
    data_frame(a = 1:3, b = 2:4) %>% 
      kable(align = 'c', format = 'latex', 
           caption = "Table caption \\label{tab:example}") %>% 
      kable_styling(full_width = FALSE)
    

    which produces

    \begin{table}[t]
    
    \caption{\label{tab:}Table caption \label{tab:example}}
    \centering
    \begin{tabular}{c|c}
    \hline
    a & b\\
    \hline
    1 & 2\\
    \hline
    2 & 3\\
    \hline
    3 & 4\\
    \hline
    \end{tabular}
    \end{table}
    

    I'm not sure, but I'd expect in some circumstances you'd need to manually edit out the auto-generated label \label{tab:}. So use knitr or R-markdown and avoid the problem.