Rの文字出力に便利な関数を作ってみた

行列などをMySQLみたいな感じで出力できてほしいなぁと思うことが何度かあったので作ってみました.

なぁんだ,それだけか,と思うかもしれませんが,これを実現するために文字を扱う上で便利な関数を作ってるので,そっちを重宝する人もいるかもしれません.

print.mysqlike:   MySQLな感じで出力する関数
convertMatrix:    完全におまけなのでコード参照
concat:           Rオブジェクトを文字列として扱い,結合します(文字幅が指定可能)
pad:              指定した文字幅になるように半角スペースで埋めます

sprintf の %s でバイト数を指定することができますが文字幅は指定できないんですよね.
そんなわけで,単純な関数ではありますが pad 関数とか便利かもしれません.
あと,print.mysqlike 関数を少しいじれば LaTeX の表を出力することも可能です.
(そいうパッケージは存在しますが…)

ダウンロードはこちらから↓
https://github.com/abicky/print.mysqlike/blob/master/print.mysqlike.R
2010/12/25: リポジトリの名前を変更しました
https://github.com/abicky/R_funcs/blob/master/print.mysqlike.R

デモ

以下デモです.

irisだとこんな感じ.

> print.mysqlike(iris[1:10,], index = TRUE)
+----+--------------+-------------+--------------+-------------+---------+
|    | Sepal.Length | Sepal.Width | Petal.Length | Petal.Width | Species |
+----+--------------+-------------+--------------+-------------+---------+
|  1 |          5.1 |         3.5 |          1.4 |         0.2 | setosa  |
|  2 |          4.9 |           3 |          1.4 |         0.2 | setosa  |
|  3 |          4.7 |         3.2 |          1.3 |         0.2 | setosa  |
|  4 |          4.6 |         3.1 |          1.5 |         0.2 | setosa  |
|  5 |            5 |         3.6 |          1.4 |         0.2 | setosa  |
|  6 |          5.4 |         3.9 |          1.7 |         0.4 | setosa  |
|  7 |          4.6 |         3.4 |          1.4 |         0.3 | setosa  |
|  8 |            5 |         3.4 |          1.5 |         0.2 | setosa  |
|  9 |          4.4 |         2.9 |          1.4 |         0.2 | setosa  |
| 10 |          4.9 |         3.1 |          1.5 |         0.1 | setosa  |
+----+--------------+-------------+--------------+-------------+---------+

日本語でもちゃんと文字幅を合わせてくれる

> print.mysqlike(list(c("あいうえお", "アイウエオ", "わをんワヲン"), c("ABC", "ABC")))
+------------+--------+
|          1 |      2 |
+------------+--------+
| あいうえお | ABC    |
| アイウエオ      | ABC |
| わをんワヲン  |        |
+------------+--------+

concat 関数はデフォルトで数値表現の文字列を右寄せにする

> concat("収入", "1,000", "合計", "1,000,000", width = 15, sep = "|")
[1] "|収入           |          1,000|合計           |      1,000,000|"

pad 関数はこんな感じ

> pad(c("あいうえお", "わをん"), width = c(20, 10))
[1] "あいうえお          " "わをん    "