1.3 Tabellen

1.3.1 knitr-Tabelle

Similarly to figures, you can reference tables generated from knitr::kable(), e.g., see Table 1.1.

Tabelle 1.1: This knitr::kable() table looks great in any output format.
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
5.1 3.5 1.4 0.2 setosa
4.9 3.0 1.4 0.2 setosa
4.7 3.2 1.3 0.2 setosa
4.6 3.1 1.5 0.2 setosa
5.0 3.6 1.4 0.2 setosa

1.3.2 komplexere (LaTeX-)Tabellen

knitr:::kable() erlaubt leider kein row- oder colspan, also keine Tabellenzellen, die über mehrere Reihen oder Spalten gehen. Ebenso gehen Markdown-Tabellen mit Span nicht, da dies in Pandoc flavored markdown nicht unterstützt wird.

Table: (\#tab:rmdTable) Broken Table.

| One    | Two | Three | Four    | Five  | Six 
| -
| Span <td colspan=3>triple  <td colspan=2>double

Ergibt eine kaputte Tabelle 1.2:

Tabelle 1.2: Broken Table.
One
| Span triple

double

Möchte man eine Tabelle ohne knitr:::kable() und ohne Pandoc erstellen, kann das Buch nicht mehr automatisch in jedes Output-Format kompiliert werden. Man kann aber selbst die Bedingung schreiben, bei welchem Output-Format welches Tabellenformat gewählt werden soll.

Dies kann man nutzen, um zumindest in PDF komplexe LaTeX-Tabellen zu erzeugen, während in HTML und Co. eine nicht ganz so schöne Tabelle dargestellt wird. Beachtet die R-Chunk-Optionen results='asis und comment='' sowie kleine Syntaxanpassungen im R-Befehl cat() wie \\ und \n, um in LaTeX kompilierbaren Output aus R heraus zu generieren.

{r latexTable, fig.cap='latexTable', results='asis', comment=''}
Tabelle 1.3: This table would be a pure LaTeX table with proper colspan in PDF
c1 c2 c3 c4
r1 r1c1c2 r1c3 r1c4
r2 r2c1 r2c2 r2c3c4

As Yihui mentions “[if] you decide to use other R packages to generate tables, you have to make sure the label for the table environment appears in the beginning of the table caption in the form (\#label) (again, label must have the prefix tab:):”
Since \ (backslash) is an escape sequence, we have to write (\\#tab:Beschriftung) here.

Da der R-Chunk die Option fig.cap='latexTable' beinhaltet und der Tabellenüberschrifts-LaTeX-Befehl (\\#tab:latexTable)) enthält, kann man in beiden Output-Bedingungen per \@ref(tab:latexTable) auf die Tabelle referenzieren: Siehe Tabelle 1.3.

1.3.3 xTable()

Ein beliebtes R-package zur Erstellung von LaTeX-Tabellen ist xtable. Auch wenn Tabelle 1.4 aussieht wie jede anderen, wurde sie mit xtable erstellt.
xtable unterstützt nur die Outputformate PDF (default) und HTML (type='html'), die aber nicht automatisch je nach gewähltem Outputformat ausgegeben werden. So muss, wie schon in Abschnitt 1.3.2 gezeigt, für jede Output-Bedingung eine eigene Tabelle erstellt werden.
Die R-Chunk-Option results='asis' sowie print.xtable(..., comment=FALSE) sorgen dafür, dass der R-Output in LaTeX kompilierbar ist.

{r xTable, fig.cap='xTable', echo=TRUE, results='asis'}
if (knitr:::is_latex_output()) {
    # PDF
    library(xtable)
    print.xtable(xtable(mtcars[1:3, 1:4], label = "xTableInternLabel", caption = "(\\#tab:xTable) An xtable table"), 
        comment = FALSE)
} else if (knitr:::is_html_output()) {
    # HTML
    library(xtable)
    print.xtable(xtable(mtcars[1:3, 1:4], label = "xTableInternLabel", caption = "(\\#tab:xTable) An xtable table"), 
        comment = FALSE, type = "html")  #only 'latex' (default) or 'html'
} else {
    # Word und andere Outputformate
    knitr::kable(mtcars[1:3, 1:4], caption = "In other output formats than PDF and HTML we cannot use xtable", 
        booktabs = TRUE)
}
Tabelle 1.4: An xtable table
mpg cyl disp hp
Mazda RX4 21.00 6.00 160.00 110.00
Mazda RX4 Wag 21.00 6.00 160.00 110.00
Datsun 710 22.80 4.00 108.00 93.00

1.3.4 interaktive Tabellen

Es können auch interaktive Tabellen eingefügt werden. Diese ergeben natürlich in statischen Dokumenten wie PDF keinen Sinn. In PDF kann aber ein Screenshot der dynamischen Tabelle/Abbildung automatisch eingefügt werden.

Problematisch beim Erstellen von Tabellen mit anderen Paketen ist die korrekte Tabellennummerierung! HTML-Widgets sind meistens Plots, weswegen Yihui vorerst auch die DT-Widgets nur als “Abbildung” bezeichnen und nummerieren lassen wird. Siehe issue 313 auf GitHub.
Um immerhin die Nummerierung als Abbild hinzubekommen, benötigt der R-Code-Chunk, der die Tabelle(ngrafik) erstellt, die Option fig.cap. Für einen schönen Screenshot gibt es etliche Chunk-Options via screenshot.opts.

{r dynamicTableWebshot, fig.cap='dynamicTableWebshot', dev='png', cache=TRUE, cache.extra=packageVersion('DT'), screenshot.opts=list(zoom=2)}

Abbildung 1.3: dynamicTableWebshot

1. See Table \@ref(tab:dynamicTableWebshot) (Tabellenreferenz-Syntax)
1. See Table \@ref(fig:dynamicTableWebshot) (Abbildungsreferenz-Syntax)
1. See Table \@ref(dynamicTableWebshot) (Überschriftsreferenz-Syntax)
  1. See Table ?? (Tabellenreferenz-Syntax)
  2. See Table 1.3 (Abbildungsreferenz-Syntax)
  3. See Table ?? (Überschriftsreferenz-Syntax)