Chciałbym wydrukować ładnie sformatowane ramki danych na papierze, najlepiej z poziomu skryptu. (Próbuję zbierać dane za pomocą instrumentu i automatycznie przetwarzać je i drukować za pomocą skryptu R).
W tej chwili mogę zapisać ramkę danych do pliku tekstowego za pomocą write.table()
, ale ma to dwa problemy:
- Wynikowy plik tekstowy jest źle sformatowany (kolumny niekoniecznie są zgodne z ich nagłówkami) i
- Nie wiem, jak wydrukować plik tekstowy z poziomu R.
Szukam bardziej ogólnych strategii niż konkretnego kodu (chociaż kod też byłby świetny!). Czy Sweave byłby najwygodniejszym rozwiązaniem? W zasadzie mogę używać socketConnection()
do drukowania na drukarce - a jeśli tak, to gdzie mogę się dowiedzieć, jak z niego korzystać (nie znalazłem dokumentacji jako bardzo pomocnej).
r
dataframe
formatting
Drew Steen
źródło
źródło
% System(lpr [filename])
, przynajmniej w świecie * nix, może pozwolić ci odpalić drukarkę z R.Odpowiedzi:
Oto szybka i łatwa możliwość korzystania
grid.table
z pakietu gridExtra:library(gridExtra) pdf("data_output.pdf", height=11, width=8.5) grid.table(mtcars) dev.off()
Jeśli Twoje dane nie mieszczą się na stronie, możesz zmniejszyć rozmiar tekstu
grid.table(mtcars, gp=gpar(fontsize=8))
. Może to nie być zbyt elastyczne ani łatwe do uogólnienia lub zautomatyzowania.źródło
grid.arrange(tableGrob(mtcars, gp=gpar(fontsize=6)), main="Main Title Here.")
.library(gridExtra); maxrow = 30; npages = ceiling(nrow(iris)/maxrow); pdf("iris_pages.pdf", height=11, width=8.5); for (i in 1:npages) {idx = seq(1+((i-1)*maxrow), i*maxrow); grid.newpage(); grid.table(iris[idx, ])}; dev.off()
mtcars
jest zawarty wdatasets
pakiecie w standardowej instalacji R. Jest ładowany domyślnie po uruchomieniu nowej sesji języka R. Spróbuj wpisać?mtcars
imtcars
po znaku zachęty R, aby zobaczyć, co mam na myśli.Sugerowałbym
xtable
w połączeniu z dokumentami LaTeX. Spójrz na przykłady w tym pliku PDF:Możesz również połączyć to bezpośrednio z
Sweave
lubknitr
.źródło
Zaskoczony, nikt nie wspomniał o
stargazer
pakiecie do ładnego drukowania danych.Możesz wypisać ładnie wyglądający plik tekstowy:
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 --------------------------------------------
Lub nawet 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>
źródło
printr
Pakiet jest dobrym rozwiązaniem do drukowaniadata.frames
, strony pomocy, ofert winieta, a zbiór danych ofert w knitr dokumentów.Ze strony dokumentacji :
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.")
źródło
Rozwiązanie grid.table będzie rzeczywiście najszybszym sposobem tworzenia plików PDF, ale może to nie być optymalne rozwiązanie, jeśli masz dość długi stół. RStudio + knitr + longtable znacznie ułatwia tworzenie ładnie sformatowanych plików PDF. Potrzebujesz czegoś takiego:
\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 zobacz ten post, aby uzyskać więcej informacji.
źródło
W przypadku długich / szerokich stołów można użyć pandera .
To automatycznie podzieli długie tabele na krótsze części, które pasują do strony, np. Używając knitr wstaw ten fragment do pliku Rmd:
Jeśli chcesz czegoś, co wygląda bardziej jak tabele Excela (nawet z opcjami edycji w html), użyj rhandsontable . Więcej informacji na temat użycia i formatowania w winiecie . Będziesz musiał połączyć Rmd w plik HTML:
library(rhandsontable) rhandsontable(mtcars, rowHeaders = NULL)
źródło
Nie tak wyszukane, ale bardzo użyteczne:
źródło
RStudio IDE daje Kolejną miłą opcję wydrukować data.table:
View(data_table)
Lub przez GUIDziała to w RStudio V0.98.1103 (i prawdopodobnie nowszych wersjach)
źródło
Natknąłem się na to pytanie, kiedy chciałem zrobić coś podobnego. Znalazłem wzmiankę o poleceniu sink w innym miejscu w stackoverflow, które było przydatne w tym kontekście:
sink('myfile.txt') print(mytable,right=F) sink()
źródło
Jeśli chcesz wyeksportować jako png, możesz to zrobić:
library(gridExtra) png("test.png", height = 50*nrow(df), width = 200*ncol(df)) grid.table(df) dev.off()
Jeśli chcesz wyeksportować jako plik PDF, możesz zrobić to w następujący sposób:
library(gridExtra) pdf("test.pdf", height=11, width=10) grid.table(df) dev.off()
źródło