Producir tablas para LaTeX
Una de las cosas más pesadas de un informe o documento es escribir tablas de datos, fórmulas o elementos de todo tipo.
Si se trata de datos numéricos, es posible que los tengamos en algún tipo de hoja de cálculo. Otra posibilidad es que la tabla sea el resultado de un procedimiento estadístico y que sea el summary()
o print()
de alguna clase de objeto de R. En suma, supongamos que estamos trabajando con R y disponemos de una tabla de datos. ¿Como los traspasamos a un documento de forma elegante?
La respuesta es xtable()
del paquete xtable
. Este paquete proporciona las funciones para trasladar nuestra tabla de R a LaTeX (por defecto) o HTML.
Para escribir una tabla de forma elegante es recomendable seguir las siguientes normas:
- Evitar las líneas verticales
- Evitar las cajas en las celdas
- Normalmente tres líneas horizontales son suficientes (dos en el encabezado y una al final de la tabla)
- Evitar las líneas dobles horizontales
- Dejar suficiente espacio entre filas
- En caso de duda alinear a la izquierda
Para seguir estas indicaciones en LaTeX podemos utilizar el paquete booktabs
que hay que incluir en el preámbulo del documento con la instrucción:
\usepackage(booktabs)
y su correspondiente parámetro en el print()
de la xtable, como en el siguiente ejemplo:
library(xtable)
data(tli)
g <- glm(disadvg ~ ethnicty*grade, data = tli, family = binomial)
print(xtable(g), booktabs = TRUE)
## % latex table generated in R 3.4.3 by xtable 1.8-2 package
## % Wed Feb 14 17:16:51 2018
## \begin{table}[ht]
## \centering
## \begin{tabular}{rrrrr}
## \toprule
## & Estimate & Std. Error & z value & Pr($>$$|$z$|$) \\
## \midrule
## (Intercept) & 3.1888 & 1.5966 & 2.00 & 0.0458 \\
## ethnictyHISPANIC & -0.2848 & 2.4808 & -0.11 & 0.9086 \\
## ethnictyOTHER & 212.1701 & 22122.7093 & 0.01 & 0.9923 \\
## ethnictyWHITE & -8.8150 & 3.3355 & -2.64 & 0.0082 \\
## grade & -0.5308 & 0.2892 & -1.84 & 0.0665 \\
## ethnictyHISPANIC:grade & 0.2448 & 0.4357 & 0.56 & 0.5742 \\
## ethnictyOTHER:grade & -32.6014 & 3393.4687 & -0.01 & 0.9923 \\
## ethnictyWHITE:grade & 1.0171 & 0.5185 & 1.96 & 0.0498 \\
## \bottomrule
## \end{tabular}
## \end{table}
En el código LaTeX generado vemos que las líneas horizontales \hline
han sido sustituidas por \toprule
, \midrule
y \bottomrule
.
Si lo creemos conveniente y para dar más espacio entre las filas podemos modificar el parámetro de LaTeX que controla precisamente ese ancho. En el documento .Rnw
escrito en LaTeX haremos algo así:
\begingroup
\sf
\setlength{\tabcolsep}{10pt} % Default value: 6pt
\renewcommand{\arraystretch}{1.3} % Default value: 1
print(xtable(g), booktabs = TRUE)
\endgroup
Como se puede ver en el código anterior, antes de generar la tabla con el print()
, se hacen tres cambios. El primero es cambiar el tipo de letra a Sans Serif, el segundo cambiar la medida de separación entre las columnas y el tercero aumentar un 30% la separación entre las columnas.
Producir tablas para HTML
Para generar una tabla HTML la instrucción es:
print(xtable(g), type = "html")
Estimate | Std. Error | z value | Pr(>|z|) | |
---|---|---|---|---|
(Intercept) | 3.1888 | 1.5966 | 2.00 | 0.0458 |
ethnictyHISPANIC | -0.2848 | 2.4808 | -0.11 | 0.9086 |
ethnictyOTHER | 212.1701 | 22122.7093 | 0.01 | 0.9923 |
ethnictyWHITE | -8.8150 | 3.3355 | -2.64 | 0.0082 |
grade | -0.5308 | 0.2892 | -1.84 | 0.0665 |
ethnictyHISPANIC:grade | 0.2448 | 0.4357 | 0.56 | 0.5742 |
ethnictyOTHER:grade | -32.6014 | 3393.4687 | -0.01 | 0.9923 |
ethnictyWHITE:grade | 1.0171 | 0.5185 | 1.96 | 0.0498 |
Hay que recordar que es necesario el parámetro results = 'asis'
en la cabezera del chunk.
Aunque en este caso resulta más elegante utilizar el paquete htmlTable
que además tiene muchas más posibilidades.
library(htmlTable)
htmlTable(round(summary(g)$coef,4), align="rrrr",
col.columns = rep(c("white","#E6E6F0"), times=2))
Además de los manuales de cada uno de los paquetes citados, creo que se puede aprender mucho en los siguientes documentos:
No hay comentarios:
Publicar un comentario