Я хотел бы напечатать красиво отформатированные фреймы данных на бумаге, в идеале из сценария. (Я пытаюсь собрать данные с помощью инструмента и автоматически обработать и распечатать их с помощью сценария R).
Прямо сейчас я могу записать фрейм данных в текстовый файл, используя write.table()
, но здесь есть две проблемы:
- Полученный текстовый файл плохо отформатирован (столбцы не обязательно совпадают с заголовками) и
- Я не знаю, как распечатать текстовый файл из R.
Я ищу больше общих стратегий, чем конкретного кода (хотя код тоже подойдет!). Будет ли Sweave самым удобным решением? В принципе, могу ли я использовать его socketConnection()
для печати на принтере - и если да, то где я могу узнать, как его использовать (я не нашел документацию очень полезной).
r
dataframe
formatting
Дрю Стин
источник
источник
% System(lpr [filename])
, по крайней мере, в мире * nix, вы можете запустить принтер изнутри R.Ответы:
Вот быстрая и простая возможность использования
grid.table
из пакета gridExtra:library(gridExtra) pdf("data_output.pdf", height=11, width=8.5) grid.table(mtcars) dev.off()
Если ваши данные не помещаются на странице, вы можете уменьшить размер текста
grid.table(mtcars, gp=gpar(fontsize=8))
. Это может быть не очень гибким, и его нельзя будет легко обобщать или автоматизировать.источник
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
входит вdatasets
стандартную установку R. Он загружается по умолчанию при запуске нового сеанса R. Попробуйте ввести?mtcars
иmtcars
в строке R, чтобы понять, что я имею в виду.Я бы предложил
xtable
в сочетании с документами LaTeX. Взгляните на примеры в этом pdf:Вы также можете напрямую комбинировать это с
Sweave
илиknitr
.источник
Удивлен, что никто не упомянул
stargazer
пакет для красивой печати данных.Вы можете вывести красивый текстовый файл:
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 --------------------------------------------
Или даже 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>
источник
printr
Пакет является хорошим вариантом для печатиdata.frames
, страницы справки, виньеток списков и списков наборов данных в knitr документов.Со страницы документации :
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.")
источник
Решение grid.table действительно будет самым быстрым способом создания PDF, но это может быть не оптимальным решением, если у вас довольно длинная таблица. RStudio + knitr + longtable позволяет легко создавать красиво отформатированные PDF-файлы. Вам понадобится что-то вроде:
\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}
Пожалуйста, смотрите этот пост для получения более подробной информации.
источник
Для длинных / широких столов вы можете использовать pander .
Он автоматически разделит длинные таблицы на более короткие части, которые соответствуют странице, например, с помощью knitr вставьте этот фрагмент в ваш файл Rmd:
Если вам нужно что-то, что больше похоже на таблицы Excel (даже с параметрами редактирования в html), используйте rhandsontable . Подробнее об использовании и форматировании в виньетке . Вам нужно будет связать свой Rmd в файл html:
library(rhandsontable) rhandsontable(mtcars, rowHeaders = NULL)
источник
Не так нарядно, но очень утилитарно:
источник
RStudio IDE дает еще один хороший вариант , чтобы распечатать data.table:
View(data_table)
или через графический интерфейс.Это работает в RStudio V0.98.1103 (и, возможно, в более новых версиях)
источник
Я столкнулся с этим вопросом, когда хотел сделать что-то подобное. Я нашел упоминание о команде приемника в другом месте в stackoverflow, которое было полезно в этом контексте:
sink('myfile.txt') print(mytable,right=F) sink()
источник
Если вы хотите экспортировать как png, вы можете сделать так:
library(gridExtra) png("test.png", height = 50*nrow(df), width = 200*ncol(df)) grid.table(df) dev.off()
Если вы хотите экспортировать в формате pdf, вы можете сделать следующее:
library(gridExtra) pdf("test.pdf", height=11, width=10) grid.table(df) dev.off()
источник