R と LaTeX の連係
LaTeX そのものの話題は各人で検索して下さい。R と関係のある LaTeX の Tips を記載してください。
RからLaTeXの表を出力するには、xtableパッケージのxtable()を使う方法とHmiscのlatex()がある。xtable()は単純な機能しか提供しないが、その分使いやすい。latex()は非常に高機能であるため、効率的にLaTeXの表を作成できる。
latex()は、通常のtabluar以外にも、booktabsやctableに対応している。もし、論文用の表を作成したいのなら、booktabsかctableのどちらかを使うべきだろう。ctableの方が高機能だがドライバ依存なのでちょっと扱いが面倒。latex()を使うにはHmiscをインストールする。
> latex(オブジェクト, file='',booktabs=T,dcolumn=T)
file=''とすると、画面に出力される。
Hmiscパッケージ、ctable.sty、dcolumn.sty
styファイルをカレントディレクトリに置けばそのまま使えるが、今後いつでも使えるようにするためには、styファイルは適当なところに置き、mktexlsrなどを実行して登録しておく。
> latex(オブジェクト, file='ファイル名.tex',ctable=T,dcolumn=T)
ctableは学術風の表にするため、dcolumnは小数点をそろえるため。
?documentclass{jsarticle} ?usepackage[xdvi]{color} ?usepackage{ctable,dcolumn} ?begin{document} ?input{ファイル名.tex} ?end{document}
上記のように論文中に?inputを使って取り込めばよい。
latex()は非常に多機能なので、是非ヘルプファイルを読まれたい。
"xtable" パッケージを利用すると、データを「LaTeXのtabular環境でのコード」 あるいは「htmlの表のコード」を出力します。
> library(xtable)
> methods(xtable) # 以下のような関数に対応 [1] xtable.anova xtable.aov [3] xtable.aovlist xtable.coxph [5] xtable.data.frame xtable.glm [7] xtable.lm xtable.matrix [9] xtable.prcomp xtable.summary.aov [11] xtable.summary.aovlist xtable.summary.glm [13] xtable.summary.lm xtable.summary.prcomp [15] xtable.ts
何もオプションを指定しないとコンソールに結果が示される。これをコピーペースとしても良いが,ちゃんとオプションを指定して,ファイルに出すのが普通。
> xtable(prcomp(matrix(rnorm(100),20,5))) # prcomp の結果を LaTeX に取込む例 % latex table generated in R 2.1.1 by xtable 1.2-5 package % Thu Aug 4 22:17:08 2005 ?begin{table}[ht] ?begin{center} ?begin{tabular}{rrrrrr} ?hline & PC1 & PC2 & PC3 & PC4 & PC5 ?? ?hline 1 & $-$0.0244 & $-$0.1054 & $-$0.9110 & $-$0.3256 & $-$0.2286 ?? 2 & $-$0.3081 & $-$0.2500 & 0.3311 & $-$0.2465 & $-$0.8199 ?? 3 & 0.0399 & 0.9111 & 0.0660 & $-$0.3748 & $-$0.1535 ?? 4 & $-$0.6196 & $-$0.1368 & 0.1157 & $-$0.5813 & 0.4961 ?? 5 & $-$0.7204 & 0.2786 & $-$0.2065 & 0.5957 & $-$0.0767 ?? ?hline ?end{tabular} ?end{center} ?end{table}
タイプセットの結果は,以下の通り
Rソースファイルを構文強調して表示することができます。
「RのソースコードをLaTeX文書に記述する」を参照。
キーワードのカラーリングなど派手だが,色数を使えばいいと言うものでもないので,奥村氏が推奨の ?begin{verbatim}〜?end{verbatim} を使うのが控えめでよいという向きはこちらを。
実行例(以下はテキストのように見えるが,画像ファイル)
?documentclass{article} ?usepackage{cprog} ?begin{document} ?begin{cprog} boa.acf <- function(link, lags) # Brian Smith has produced the BOA (Bayesian Output Analysis) suite of # S-plus/R functions for analysis of MCMC output, which reads in output # from Classic BUGS or WinBUGS. Version 0.5.0 is now available. { pnames <- boa.pnames(link) result <- matrix(NA, nrow = ncol(link), ncol = length(lags), dimnames = list(pnames, paste("Lag", lags))) lags <- lags[lags <= (nrow(link) - 1)] n.lags <- length(lags) if(n.lags > 0) { idx <- 1:n.lags lag.max <- max(lags) for(i in pnames) { result[i, idx] <- acf(link[, i], lag.max = lag.max, plot = FALSE)$acf[lags + 1] } } return(result) } ?end{cprog} ?end{document}
実行例(以下はテキストのように見えるが,画像ファイル)
> dev.copy2eps( file = "file_name.eps" )
pdflatex+pdfscreenなどでは epsは使えない。代わりにpdfを作成する必要がある。
> dev.copy(pdf,file="file_name.pdf") > dev.off()
または
> pdf() > plot(x) > dev.off()
LaTeX ソースは以下のような感じ。bb= の次の4つの数字は,最初の二つが実際に描かれる画像のファイル上での左下座標,次の二つが右上座標。これを調整すれば,元の画像そのままで実際に描かれる領域を操作できる。width= の次は実際に描かれる画像の横幅。不用意に縦座標を指定してしまうとアスペクト比が狂うので片方だけ与えればよい。当然,figure 環境で囲んでフロートにするなり自由に。
?documentclass[a4paper] {jsarticle} ?usepackage[dvipdfm]{graphicx} ?usepackage{ctable} ?begin{document} ?includegraphics[bb=2 2 363 275, clip, width=150mm]{pdf.pdf} ?includegraphics[bb=2 2 363 275, clip, width=80mm]{pdf.pdf} ?end{document}
実際の出力例
> dev.copy(pictex,"fig1.tex")
できあがったpicTeX形式の図(上記例ではfig1.tex)はテキストファイルなので、テキストエディタで日本語に書き換えることができます。picTeXはメモリを大量に消費するので、メモリを多く消費する他のstyファイルと一緒には使えないことがあります。(TEXMF/web2c/texmf.cnfで上限を調節して下さい)
まず R で
x <- rnorm(10) pictex("test.tex") plot(x) dev.off()
これで作られたファイル test.tex の最初に次を加える
?documentclass[a4paper]{jarticle} ?usepackage{pictex} ?begin{document}
当然最後に次を加える
?end{document}
次に test.tex からx,y軸ラベルに相当するところを見つけ編集、つまり
?put {Index} [rB] <0.00pt,0.00pt> at 169.59 5.17 ?put {x} [lB] <0.00pt,0.00pt> at 9.72 154.73
をたとえば
?put {インデックス} [lB] <0.00pt,0.00pt> at 169.59 5.17 ?put {?shortstack[r]{ス??[-7mm] ク??[-7mm] ッ??[-7mm] エ}} [rB] <0.00pt,0.00pt> at 2 154.73
に変更する。at 以下はテキストをおく位置の x,y 座標ですから、これをいじくれば見栄えの良い位置になります。?shortstack 内のテキストはさかさまにします。??[-7mm] は垂直間隔を調整するためです。さらに微妙な調整をするには pictex の命令を勉強する必要がありそうです。画像ファイルが欲しければ dvips test.dvi で ps ファイルにし、さらに Imagemagik 等の画像ソフトで最終的に欲しいフォーマットに変換する、でしょうか。特に複雑な画像はひょっとすると latex コンパイル時にトラブルが起きるかも知れません。参考画像は latex の一頁分そのままです(でっかく、見苦しくて済みません)。 x 軸マークはお遊びです、どうしたかはもう想像がつくかと思います。
R単独でも日本語や数式は使えますが、美しい数式が必要な場合はTeXの力を借ります。PSfragというLaTeX用のパッケージを使います。
PSfrag を使う場合は、英文の図を日本語の図に変換するため、論文に使った図(英文)を講義(日本語)などで使い回す際に、改めて日本語の図を再作成する必要がなくとても便利です。しかし、xdvi でプレビューできませんので、注意が必要です。
ツール Sweave を使うと、R コードと LATEX ドキュメントの一体化ができ、画像を含む解析結果を自動的に LATEX ソースファイルに取り込むことができます。論文、定型的レポート等、コードとデータを変えた場合も一発で済みます。