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)}
1. See Table \@ref(tab:dynamicTableWebshot) (Tabellenreferenz-Syntax)
1. See Table \@ref(fig:dynamicTableWebshot) (Abbildungsreferenz-Syntax)
1. See Table \@ref(dynamicTableWebshot) (Überschriftsreferenz-Syntax)