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:
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()
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')
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
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:
View(data_table)
ou via l’interface graphique 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)
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)
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()