81

理想的にはスクリプト内から、適切にフォーマットされたデータフレームを紙に印刷したいと思います。(私は機器を使用してデータを収集し、Rスクリプトを使用してそれを自動的に処理して印刷しようとしています)。

現在、を使用してデータフレームをテキストファイルに書き込むことができますwrite.table()が、これには2つの問題があります。

  1. 結果のテキストファイルの形式が適切でなく(列が必ずしも見出しと一致するとは限りません)、
  2. R内からテキストファイルを印刷する方法がわかりません。

私は特定のコードよりも一般的な戦略を探しています(コードも素晴らしいでしょうが!)。Sweaveが最も便利なソリューションでしょうか?原則socketConnection()として、プリンターへの印刷に使用できますか?その場合、その使用方法についてどこで学ぶことができますか(ドキュメントが非常に役立つとは思いませんでした)。

4

10 に答える 10

108

grid.tablegridExtra パッケージを使用して、すばやく簡単に使用できる方法を次に示します。

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

ここに画像の説明を入力

データがページに収まらない場合は、テキスト サイズを縮小できますgrid.table(mtcars, gp=gpar(fontsize=8))。これはあまり柔軟ではなく、一般化や自動化も容易ではありません。

于 2012-05-14T17:31:50.363 に答える
16

xtableLaTeX ドキュメントと組み合わせて使用​​することをお勧めします。このpdfの例を見てください:

Sweaveこれをまたはと直接組み合わせることもできますknitr

于 2012-05-14T16:55:17.067 に答える
10

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>

于 2016-10-24T17:26:36.830 に答える
7

このprintrパッケージは、knitrドキュメントの印刷data.frames、ヘルプ ページ、ビネット リスト、およびデータセット リストに適したオプションです。

ドキュメントページから:

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.")
于 2015-07-04T13:45:05.853 に答える
5

それほど派手ではありませんが、非常に実用的です。

print.data.frame(iris)
于 2013-09-20T18:09:53.083 に答える
5

長い/広いテーブルの場合は、 panderを使用できます。

長いテーブルをページに合わせて短い部分に自動的に分割します。たとえば、knitr を使用して、このチャンクを Rmd ファイルに挿入します。

pander::pander(mtcars)

ここに画像の説明を入力

Excel テーブルのように見えるものが必要な場合は(html の編集オプションを使用しても)、rhandsontableを使用します。ビネットでの使用法と書式設定に関する詳細情報。Rmd を html ファイルに編成する必要があります。

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

ここに画像の説明を入力

于 2017-01-03T16:34:12.803 に答える
2

似たようなことをしようとしているときに、この質問に出くわしました。このコンテキストで役立つ、stackoverflowの他の場所でのシンク コマンドの言及を見つけました。

sink('myfile.txt')
print(mytable,right=F)
sink()
于 2016-02-27T21:50:03.247 に答える