Comment imprimer (sur papier) un bloc de données bien formaté

Je voudrais imprimer des frameworks de données bien formatés sur du papier, idéalement depuis un script. (J’essaie de collecter des données à l’aide d’un instrument et de les traiter et les imprimer automatiquement à l’aide d’un script R).

En ce moment, je peux écrire un bloc de données dans un fichier texte en utilisant write.table() , mais cela pose deux problèmes:

  1. Le fichier texte résultant est mal formaté (les colonnes ne sont pas nécessairement alignées avec leurs en-têtes) et
  2. Je ne sais pas comment imprimer un fichier texte depuis R.

Je recherche plus des stratégies générales que des codes spécifiques (bien que le code soit génial aussi!). Sweave serait-il la solution la plus pratique? En principe, est-ce que je peux utiliser socketConnection() pour imprimer sur une imprimante – et si oui, où puis-je apprendre à l’utiliser (je n’ai pas trouvé la documentation très utile).

Voici une possibilité rapide et facile d’utiliser grid.table partir du paquet gridExtra:

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

entrer la description de l'image ici

Si vos données ne tiennent pas sur la page, vous pouvez réduire la taille du texte grid.table(mtcars, gp=gpar(fontsize=8)) taille de la grid.table(mtcars, gp=gpar(fontsize=8)) . Cela peut ne pas être très flexible, ni facile à généraliser ou à automatiser.

Je suggérerais xtable en combinaison avec des documents LaTeX. Regardez les exemples de ce pdf:

Vous pouvez également combiner directement ceci avec Sweave ou knitr .

Le package printr est une bonne option pour imprimer des data.frames , des pages d’aide, des listes de vignettes et des listes de jeux de données dans des documents Knitr .

De la page de documentation :

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

La solution grid.table sera en effet le moyen le plus rapide de créer un fichier PDF, mais ce n’est peut-être pas la solution optimale si vous disposez d’une table assez longue. RStudio + knitr + longtable facilite la création de fichiers PDF bien formatés. Vous aurez besoin de quelque chose comme:

 \documentclass{article} \usepackage{longtable} \begin{document} <>= library(xtable) df = data.frame(masortingx(rnorm(400), nrow=100)) xt = xtable(df) print(xt, tabular.environment = "longtable", floating = FALSE ) @ \end{document} 

Pls voir cet article pour plus de détails.

Surpris, personne n’a mentionné le package stargazer pour une impression agréable des données.

Vous pouvez générer un fichier texte agréable:

 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 -------------------------------------------- 

Ou même HTML:

 stargazer(mtcars, type = 'html', out = 'out.html') 
 
StatisticNMeanSt. Dev.MinMax
mpg3220.0916.02710.40033.900
cyl326.1881.78648
disp32230.722123.93971.100472.000
hp32146.68868.56352335
drat323.5970.5352.7604.930
wt323.2170.9781.5135.424
qsec3217.8491.78714.50022.900
vs320.4380.50401
am320.4060.49901
gear323.6880.73835
carb322.8121.61518

Pas aussi chic, mais très utilitaire:

 print.data.frame(iris) 

L’ IDE RStudio offre une autre option intéressante pour imprimer une table data.table:

  1. Ouvrez les données dans le visualiseur, par exemple View(data_table) ou via l’interface graphique
  2. Ouvrez la vue dans une fenêtre séparée (icône en haut à gauche: “Afficher dans une nouvelle fenêtre”)
  3. La fenêtre séparée prend désormais en charge une boîte de dialog d’impression (y compris un aperçu)

Cela fonctionne dans RStudio V0.98.1103 (et probablement les versions plus récentes)

Pour les tables longues / larges, vous pouvez utiliser des crayons .

Il divisera automatiquement les longues tables en parties plus courtes qui correspondent à la page, par exemple en utilisant knitr insérez ce morceau dans votre fichier Rmd:

 pander::pander(mtcars) 

entrer la description de l'image ici

Si vous voulez quelque chose qui ressemble plus à des tableaux Excel (même avec des options d’édition en HTML), alors utilisez rhandsontable . Plus d’informations sur l’utilisation et le formatage dans la vignette . Vous devrez sortingcoter votre Rmd dans un fichier html:

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

entrer la description de l'image ici

Je suis tombé sur cette question en cherchant à faire quelque chose de similaire. J’ai trouvé la mention de la commande de l’évier ailleurs sur stackoverflow qui était utile dans ce contexte:

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

Si vous voulez exporter en png, vous pouvez faire comme ceci:

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

Si vous voulez exporter en pdf, vous pouvez faire comme ceci:

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