Herramientas para hacer tablas de látex en R [cerrado]

268

A petición general, un wiki comunitario sobre la producción de tablas de látex en R. En esta publicación, daré una descripción general de los paquetes y blogs más utilizados con código para producir tablas de látex a partir de objetos menos directos. Por favor, siéntase libre de agregar lo que me perdí, y / o dar consejos, sugerencias y pequeños trucos sobre cómo producir tablas de látex bien formateadas con R.

Paquetes:

  • xtable : para tablas estándar de la mayoría de los objetos simples. Una bonita galería con ejemplos se puede encontrar aquí .
  • memisc : herramienta para la gestión de datos de encuestas, contiene algunas herramientas para tablas de látex de estimaciones del modelo de regresión (básico).
  • Hmisc contiene una función latex()que crea un archivo tex que contiene el objeto de elección. Es bastante flexible y también puede generar longtabletablas de látex. Hay mucha información en el archivo de ayuda?latex
  • miscFuncs tiene una función ordenada 'latextable' que convierte datos matriciales con entradas alfabéticas y numéricas mixtas en una tabla LaTeX y las imprime en la consola, para que puedan copiarse y pegarse en un documento LaTeX.
  • El paquete texreg ( papel JSS ) convierte la salida del modelo estadístico en tablas LaTeX. Fusiona múltiples modelos. Puede hacer frente a unos 50 tipos de modelos diferentes, incluidos modelos de red y modelos multinivel (lme y lme4).
  • El paquete reporttools ( papel JSS ) es otra opción para estadísticas descriptivas sobre variables continuas, categóricas y de fecha.
  • El paquete de tablas es quizás el paquete de creación de tablas LaTeX más general en R para estadísticas descriptivas
  • El paquete Stargazer hace buenas tablas de resumen de modelos estadísticos comparativos

Blogs y fragmentos de código

Preguntas relacionadas :

Joris Meys
fuente
44
En Cross Validated (stats.SE), la siguiente publicación de blog será de interés para los lectores aquí: Algunas notas sobre cómo hacer tablas efectivas .
gung - Restablece a Mónica el
2
También puedes usar ztable. Hace tablas con rayas de cebra en formatos LaTeX y HTML fácilmente. Es bastante flexible y simple: cran.r-project.org/web/packages/ztable/vignettes/ztable.html
skan el
¿Cuál es el "procedimiento" sugerido para trabajar con muchas tablas en R (o RStudio) y usarlas desde un programa externo de Latex, como TexStudio, para incrustarlas en un proyecto mucho más grande?
skan
1
@skan Eso es específico del látex. Si crea documentos "secundarios", los crea como documentos de látex y usa cualquierainclude o input. Puedes usar writeLines()cuál funciona con ambos kable()y xtable(). Almacenar como archivos .tex y problema resuelto.
Joris Meys
1
OTOH, si usa varios documentos y desea combinarlos en uno (no está claro en ese caso), crea los documentos y los usa inputpara obtener uno en los otros. El manual de latex le dirá que esto es lo mismo que escribir el contenido del documento en ese lugar, por lo tanto, no es necesario copiar y pegar toda la configuración que hizo en el preámbulo.
Joris Meys

Respuestas:

22

Me gustaría agregar una mención del paquete "brew". Puede escribir un archivo de plantilla de preparación que sería LaTeX con marcadores de posición, y luego "prepararlo" para crear un archivo .tex para \ include o \ input en su LaTeX. Algo como:

\begin{tabular}{l l}
A & <%= fit$A %> \\
B & <%= fit$B %> \\
\end{tabular}

La sintaxis de preparación también puede manejar bucles, por lo que puede crear una fila de tabla para cada fila de un marco de datos.

Hombre espacial
fuente
El paquete R.rsp y su función rstring () es similar a brew :: brew (). No estoy seguro de si es mejor, pero el paquete ciertamente tiene más cosas. En cualquier caso, me gusta este enfoque, ya que brinda más flexibilidad en el código de texto sin sacrificar la reproducibilidad.
Richard DiSalvo
21

Gracias Joris por crear esta pregunta. Con suerte, se convertirá en una wiki comunitaria.

Los paquetes booktabs en latex producen tablas bonitas. Aquí hay una publicación de blog sobre cómo usar xtable para crear tablas de látex que usan fichas de libro

También agregaría el apsrtablepaquete a la mezcla, ya que produce tablas de regresión atractivas.

Otra idea: algunos de estos paquetes (especialmente memisc y apsrtable) permiten extensiones fáciles del código para producir tablas para diferentes objetos de regresión. Un ejemplo de esto es el código lme4 memisc que se muestra en la pregunta. Puede tener sentido iniciar un repositorio de github para recopilar dichos fragmentos de código y, con el tiempo, incluso puede agregarlo al paquete memisc. ¿Ningún arrendatario?

Ramnath
fuente
18

El paquete stargazer es otra buena opción. Admite objetos de muchas funciones y paquetes de uso común (lm, glm, svyreg, survival, pscl, AER), así como de zelig. Además de las tablas de regresión, también puede generar estadísticas de resumen para marcos de datos o generar directamente el contenido de los marcos de datos.

usuario1953965
fuente
15

Tengo algunos trucos y soluciones a interesantes 'características' de xtable y Latex que compartiré aquí.

Truco n. ° 1: eliminación de duplicados en columnas y truco n. ° 2: uso de fichas de libros

Primero, cargar paquetes y definir mi función limpia

<<label=first, include=FALSE, echo=FALSE>>= 
    library(xtable)
    library(plyr)

    cleanf <- function(x){     
        oldx <- c(FALSE, x[-1]==x[-length(x)])  
        # is the value equal to the previous?    
        res <- x
        res[oldx] <- NA
        return(res)} 

Ahora genera algunos datos falsos

data<-data.frame(animal=sample(c("elephant", "dog", "cat", "fish", "snake"), 100,replace=TRUE),
            colour=sample(c("red", "blue", "green", "yellow"), 100,replace=TRUE),
            size=rnorm(100,mean=500, sd=150),
            age=rlnorm(100, meanlog=3, sdlog=0.5))

    #generate a table
    datatable<-ddply(data, .(animal, colour), function(df) {
                return(data.frame(size=mean(df$size), age=mean(df$age)))
            })

Ahora podemos generar una tabla y usar la función de limpieza para eliminar entradas duplicadas en las columnas de la etiqueta.

cleandata<-datatable
cleandata$animal<-cleanf(cleandata$animal)
cleandata$colour<-cleanf(cleandata$colour)
@ 

esta es una xtable normal

<<label=normal, results=tex, echo=FALSE>>=
print(
    xtable(
        datatable
        ),
        tabular.environment='longtable',
        latex.environments=c("center"), 
        floating=FALSE, 
        include.rownames=FALSE
    )
@ 

esta es una tabla x normal donde una función personalizada ha convertido los duplicados en NA

<<label=cleandata, results=tex, echo=FALSE>>=
print(
    xtable(
        cleandata
        ),
        tabular.environment='longtable',
        latex.environments=c("center"), 
        floating=FALSE, 
        include.rownames=FALSE
    )
@ 

Esta tabla usa el paquete booktab (y necesita un \ usepackage {booktabs} en los encabezados)

\begin{table}[!h] 
        \centering
        \caption{table using booktabs.}
        \label{tab:mytable}
<<label=booktabs, echo=F,results=tex>>= 
            mat <- xtable(cleandata,digits=rep(2,ncol(cleandata)+1))
            foo<-0:(length(mat$animal))
            bar<-foo[!is.na(mat$animal)]
            print(mat, 
                  sanitize.text.function = function(x){x},
                  floating=FALSE,
                  include.rownames=FALSE,
                  hline.after=NULL, 
                  add.to.row=list(pos=list(-1,bar,nrow(mat)), 
                  command=c("\\toprule ", "\\midrule ", "\\bottomrule ")))
  #could extend this with \cmidrule to have a partial line over
  #a sub category column and \addlinespace to add space before a total row
@ 
PaulHurleyuk
fuente
12

Se pueden usar dos utilidades en el paquete taRifx en concierto para producir tablas de varias filas de jerarquías anidadas.

library(datasets)
library(taRifx)
library(xtable)

test.by <- bytable(ChickWeight$weight, list( ChickWeight$Chick, ChickWeight$Diet) )
colnames(test.by) <- c('Diet','Chick','Mean Weight')
print(latex.table.by(test.by), include.rownames = FALSE, include.colnames = TRUE, sanitize.text.function = force)
#   then add \usepackage{multirow} to the preamble of your LaTeX document
#   for longtable support, add ,tabular.environment='longtable' to the print command (plus add in ,floating=FALSE), then \usepackage{longtable} to the LaTeX preamble

salida de tabla de muestra

Ari B. Friedman
fuente
2
¿Hay alguna manera de hacer algo similar pero con un marco de datos completo en lugar de un solo vector como se ingresa con bytable ()?
Thraupidae
5

... y truco # 3 entradas multilínea en una Xtable

Generar algunos datos más

moredata<-data.frame(Nominal=c(1:5), n=rep(5,5), 
        MeanLinBias=signif(rnorm(5, mean=0, sd=10), digits=4), 
        LinCI=paste("(",signif(rnorm(5,mean=-2, sd=5), digits=4),
                ", ", signif(rnorm(5, mean=2, sd=5), digits=4),")",sep=""),
        MeanQuadBias=signif(rnorm(5, mean=0, sd=10), digits=4), 
        QuadCI=paste("(",signif(rnorm(5,mean=-2, sd=5), digits=4),
                ", ", signif(rnorm(5, mean=2, sd=5), digits=4),")",sep=""))

names(moredata)<-c("Nominal", "n","Linear Model \nBias","Linear \nCI", "Quadratic Model \nBias", "Quadratic \nCI")

Ahora produzca nuestra tabla x, utilizando la función de desinfección para reemplazar los nombres de columna con los comandos correctos de línea nueva de Latex (incluidas las barras diagonales inversas para que R esté contento)

<<label=multilinetable, results=tex, echo=FALSE>>=
foo<-xtable(moredata)
align(foo) <- c( rep('c',3),'p{1.8in}','p{2in}','p{1.8in}','p{2in}' )
print(foo, 
            floating=FALSE, 
            include.rownames=FALSE,
            sanitize.text.function = function(str) {
                str<-gsub("\n","\\\\", str, fixed=TRUE)

                return(str)
            }, 
            sanitize.colnames.function = function(str) {
                str<-c("Nominal", "n","\\centering Linear Model\\\\ \\% Bias","\\centering Linear \\\\ 95\\%CI", "\\centering Quadratic Model\\\\ \\%Bias", "\\centering Quadratic \\\\ 95\\%CI \\tabularnewline")
                return(str)
            })
@  

(aunque esto no es perfecto, ya que necesitamos \ tabularnewline para que la tabla esté formateada correctamente, y Xtable todavía pone un \ final, por lo que terminamos con una línea en blanco debajo del encabezado de la tabla).

PaulHurleyuk
fuente
5

También puede usar la función latextable del paquete R micsFuncs:

http://cran.r-project.org/web/packages/miscFuncs/index.html

latextable (M), donde M es una matriz con entradas mixtas alfabéticas y numéricas, genera una tabla básica de LaTeX en la pantalla, que se puede copiar y pegar en un documento de LaTeX. Cuando hay números pequeños, también los reemplaza con notación de índice (por ejemplo, 1.2x10 ^ {- 3}).

Benjamin Taylor
fuente
5

Otro paquete R para agregar modelos de regresión múltiple en tablas LaTeX es texreg .

Philip Leifeld
fuente