2010-10-07 53 views
32

¿Hay alguna forma de generar un PDF de una tabla desde R de la misma manera que se produce una gráfica (es decir, con pdf() o ggsave())? Me doy cuenta de que hay maneras con otros programas (usando sweave etc.), pero me gustaría producirlo solo desde R.Crear una tabla en PDF

Respuesta

30

Sí, hay como se puede colocar texto en gráficos y por lo tanto en dispositivos PDF.

El envoltorio más bonito para esto puede ser la función textplot() en el paquete de confianza gplots de Greg Warnes. A continuación se muestra el comienzo de la sección de ejemplos de su página de ayuda:

# show R version information 
textplot(version) 
# show the alphabet as a single string 
textplot(paste(letters[1:26], collapse=" ")) 

# show the alphabet as a matrix 
textplot(matrix(letters[1:26], ncol=2)) 

### Make a nice 4 way display with two plots and two text summaries 
data(iris) 
par(mfrow=c(2,2)) 
plot(Sepal.Length ~ Species, data=iris, border="blue", col="cyan", 
     main="Boxplot of Sepal Length by Species")  
plotmeans(Sepal.Length ~ Species, data=iris, barwidth=2, connect=FALSE, 
      main="Means and 95\% Confidence Intervals\nof Sepal Length by Species") 

info <- sapply(split(iris$Sepal.Length, iris$Species), 
       function(x) round(c(Mean=mean(x), SD=sd(x), N=gdata::nobs(x)),2)) 

textplot(info, valign="top" ) 
title("Sepal Length by Species") 

reg <- lm(Sepal.Length ~ Species, data=iris) 
textplot(capture.output(summary(reg)), valign="top") 
title("Regression of Sepal Length by Species") 

par(mfrow=c(1,1)) 
+0

Gracias, esto parece estar funcionando! – Tom

4

También existe la función addtable2plot en el paquete plotrix.

14

ver también grid.table en gridExtra, usando gráficos de cuadrícula.

4

Hace poco quise hacer esto pero no me gustó el formato de salida de grideExtra o textplot, así que escribí esta función para hacerlo en látex. Es un poco de un trabajo de corte y hay mejores maneras con sweave o knitr, pero puede que le resulte útil modificar para sus propósitos:

createPDF <- function(xx, name=deparse(substitute(xx))){ 
    require(xtable) 
    tt <- print(xtable(xx), type='latex') 
    texfile <- paste0('./reports/', name, '.tex') 
    cat(
    '\\documentclass[12pt]{report} 
\\usepackage[landscape]{geometry} 
\\date{} 
\\begin{document}', tt, '\\end{document}', sep='', 
    file=texfile 
) 
    ## pdflatex from texlive package for linux converts .tex to .pdf 
    system(paste0('pdflatex ', '-output-directory ./reports ', texfile)) 
}