2012-05-14 21 views
70

Mi piacerebbe stampare fotogrammi di dati ben formattati su carta, idealmente da uno script. (Sto cercando di raccogliere dati usando uno strumento e lo elabora e stampo automaticamente usando uno script R).Come stampare (su carta) un frame di dati ben formattato

In questo momento posso scrivere un frame di dati in un file di testo utilizzando write.table(), ma questo ha due problemi:

  1. Il file di testo risultante è mal formattato (le colonne non necessariamente si allineano con le loro intestazioni) e
  2. non so come stampare un file di testo dall'interno di R.

sto cercando di più per strategie generali che per codice specifico (anche se il codice sarebbe troppo grande!). Sweave sarebbe la soluzione più conveniente? In linea di principio posso usare socketConnection() per stampare su una stampante, e in tal caso, dove posso sapere come usarlo (non ho trovato la documentazione molto utile).

+0

Stiamo parlando di MS Word presumo o è un Carta LaTeX? –

+0

Hai installato LaTeX sul tuo computer? Sto pensando a una combinazione di xtable, sweave (o knitr) e forse questo: http://livedocs.adobe.com/acrobat_sdk/10/Acrobat10_HTMLHelp/wwhelp/wwhimpl/common/html/wwhelp.htm?context=Acrobat10_SDK_HTMLHelp&file = DevFAQ_UnderstandingSDK.22.31.html potrebbe aiutare. Ma sembra un po 'complesso. Sono interessato a vedere ciò che gli altri inventano per questo. – Dason

+0

In realtà non voglio posizionare il frame di dati in un documento più grande, voglio solo avere un pezzo di carta stampato con un frame di dati leggibile, che poi inserirò nel mio taccuino di laboratorio come una copia cartacea di l'uscita dello strumento. –

risposta

93

Ecco una possibilità semplice e veloce utilizzando grid.table dal pacchetto gridExtra:

library(gridExtra) 
pdf("data_output.pdf", height=11, width=8.5) 
grid.table(mtcars) 
dev.off() 

enter image description here

Se i dati non si adatta alla pagina, è possibile ridurre la dimensione del testo grid.table(mtcars, gp=gpar(fontsize=8)). Questo potrebbe non essere molto flessibile, né facile da generalizzare o automatizzare.

+0

@bdemarest, come si mette un titolo in questo grafico in pdf? – user1471980

+0

@ user1471980, Un modo per farlo è 'grid.arrange (tableGrob (mtcars, gp = gpar (fontsize = 6)), main =" Titolo principale qui. ")'. – bdemarest

+0

C'è un modo per stampare un frame di dati ha un numero molto grande di righe che non rientrano in una sola pagina? – Nanami

16

Vorrei suggerire xtable in combinazione con documenti LaTeX. Date un'occhiata agli esempi in questo pdf:

Si potrebbe anche combinare direttamente questo con Sweave o knitr.

+4

Per favore, nessuna risposta di collegamento solo. Sarebbe fantastico avere un esempio di codice minimo con dati riproducibili e output di esempio. –

4

non sofisticato, ma molto utilitaristica:

print.data.frame(iris) 
+1

Questo lo visualizza sullo schermo, ma non mostra come ottenerlo su carta. –

5

Il pacchetto printr è una buona opzione per la stampa data.frames, pagine di aiuto, elenchi vignette, ed elenchi di dataset in knitr documenti.

Dal documentation page:

options(digits = 4) 
set.seed(123) 
x = matrix(rnorm(40), 5) 
dimnames(x) = list(NULL, head(LETTERS, ncol(x))) 
knitr::kable(x, digits = 2, caption = "A table produced by printr.") 
+0

Ho trovato che questa è l'opzione migliore tra tutte le risposte, se stai cercando di stampare un dataframe in un pdf prodotto da knitr. – snd

2

Il RStudio IDE dà un'altra bella opzione per stampare una data.table:

  1. Aprire i dati nel visualizzatore, ad esempio, View(data_table) o tramite l'interfaccia grafica
  2. Aprire la visualizzazione in una finestra separata (icona in alto a sinistra: "Mostra in una nuova finestra")
  3. La finestra separata supporta ora una finestra di stampa (incl anteprima.)

questo funziona in RStudio V0.98.1103 (e versioni più recenti) probabilmente

+0

Sembra che la finestra di dialogo di stampa per finestre separate non sia più disponibile con RStudio V0.99. – kirk

+0

È ancora possibile ottenerlo facendo clic con il tasto destro del mouse sulla vista e selezionando "Apri fotogramma" (v0.99.887). – mpe

6

la soluzione grid.table sarà infatti il ​​modo più rapido per creare PDF, ma questo potrebbe non essere la soluzione ottimale se si dispone di un tempo abbastanza lungo tavolo. RStudio + knitr + longtable rendono abbastanza facile la creazione di PDF ben formattati.Che cosa hai bisogno è qualcosa di simile:

\documentclass{article} 
\usepackage{longtable} 
\begin{document} 

<<results='asis'>>= 
library(xtable) 

df = data.frame(matrix(rnorm(400), nrow=100)) 
xt = xtable(df) 
print(xt, 
     tabular.environment = "longtable", 
     floating = FALSE 
    ) 
@ 
\end{document} 

Pls vede this postale per maggiori dettagli.

+0

Questa risposta sarebbe molto meglio con un esempio minimo di dati e output. Ora, lo sento come una risposta falsa. –

1

Mi sono imbattuto in questa domanda quando ho cercato di fare qualcosa di simile. Ho trovato menzione del comando lavandino elsewhere su StackOverflow che è stato utile in questo contesto:

sink('myfile.txt') 
print(mytable,right=F) 
sink() 
4

Sorpreso nessuno ha menzionato il pacchetto stargazer per bella la stampa dei dati.

È possibile emettere un bell'aspetto file di testo:

stargazer(mtcars, type = 'text', out = 'out.txt') 

============================================ 
Statistic N Mean St. Dev. Min  Max 
-------------------------------------------- 
mpg  32 20.091 6.027 10.400 33.900 
cyl  32 6.188 1.786  4  8 
disp  32 230.722 123.939 71.100 472.000 
hp  32 146.688 68.563 52  335 
drat  32 3.597 0.535 2.760 4.930 
wt  32 3.217 0.978 1.513 5.424 
qsec  32 17.849 1.787 14.500 22.900 
vs  32 0.438 0.504  0  1 
am  32 0.406 0.499  0  1 
gear  32 3.688 0.738  3  5 
carb  32 2.812 1.615  1  8 
-------------------------------------------- 

O anche HTML:

stargazer(mtcars, type = 'html', out = 'out.html') 

<table style="text-align:center"><tr><td colspan="6" style="border-bottom: 1px solid black"></td></tr><tr><td style="text-align:left">Statistic</td><td>N</td><td>Mean</td><td>St. Dev.</td><td>Min</td><td>Max</td></tr> 
 
<tr><td colspan="6" style="border-bottom: 1px solid black"></td></tr><tr><td style="text-align:left">mpg</td><td>32</td><td>20.091</td><td>6.027</td><td>10.400</td><td>33.900</td></tr> 
 
<tr><td style="text-align:left">cyl</td><td>32</td><td>6.188</td><td>1.786</td><td>4</td><td>8</td></tr> 
 
<tr><td style="text-align:left">disp</td><td>32</td><td>230.722</td><td>123.939</td><td>71.100</td><td>472.000</td></tr> 
 
<tr><td style="text-align:left">hp</td><td>32</td><td>146.688</td><td>68.563</td><td>52</td><td>335</td></tr> 
 
<tr><td style="text-align:left">drat</td><td>32</td><td>3.597</td><td>0.535</td><td>2.760</td><td>4.930</td></tr> 
 
<tr><td style="text-align:left">wt</td><td>32</td><td>3.217</td><td>0.978</td><td>1.513</td><td>5.424</td></tr> 
 
<tr><td style="text-align:left">qsec</td><td>32</td><td>17.849</td><td>1.787</td><td>14.500</td><td>22.900</td></tr> 
 
<tr><td style="text-align:left">vs</td><td>32</td><td>0.438</td><td>0.504</td><td>0</td><td>1</td></tr> 
 
<tr><td style="text-align:left">am</td><td>32</td><td>0.406</td><td>0.499</td><td>0</td><td>1</td></tr> 
 
<tr><td style="text-align:left">gear</td><td>32</td><td>3.688</td><td>0.738</td><td>3</td><td>5</td></tr> 
 
<tr><td style="text-align:left">carb</td><td>32</td><td>2.812</td><td>1.615</td><td>1</td><td>8</td></tr> 
 
<tr><td colspan="6" style="border-bottom: 1px solid black"></td></tr></table>

2

Per lunghi tavoli/larghe si potrebbe utilizzare pander.

Divide automaticamente i tavoli lunghi in parti più corte che si adattano alla pagina, ad es. utilizzando knitr inserire questo pezzo nel file Rmd:

pander::pander(mtcars) 

enter image description here

Se si desidera qualcosa che assomiglia di più a tabelle Excel (anche con opzioni di editing in HTML) quindi utilizzare rhandsontable. Ulteriori informazioni sull'utilizzo e la formattazione nel vignette. Sarà necessario lavorare a maglia la tua Rmd in un file HTML:

library(rhandsontable) 
rhandsontable(mtcars, rowHeaders = NULL) 

enter image description here

0

Se si desidera esportare come PNG, si può fare in questo modo:

library(gridExtra) 
png("test.png", height = 50*nrow(df), width = 200*ncol(df)) 
grid.table(df) 
dev.off() 

Se si desidera per esportare in formato PDF, puoi fare così:

library(gridExtra) 
pdf("test.pdf", height=11, width=10) 
grid.table(df) 
dev.off() 
Problemi correlati