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.
| 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:
| One |
|---|
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=''}
| 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)
}| 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)