最近のマイブームはTeXです。たぶん[改訂第6版] LaTeX2ε美文書作成入門がでて,Texlive2013ベースで導入するようになり,導入の敷居が低くなった=プラットフォーム化がすすんだことが原因の一つなんだろうと思う。これでうちみたいな文系心理の学生にも紹介しやすくなったし。
ところで,昨日必要に迫られて(理由はこちら)psychパッケージのヘルプを読んでいたら,ずいぶんと便利な関数があることを知った。psychパッケージの結果をTeX出力してくれる関数群だ。結果の美しさに感動したので,ついでにRとTeXのつなぎ方について,わかったことを書いておく。ここで紹介するのは,
- RstudioのSweave機能
- xtablesパッケージ
- psychパッケージのいくつかの関数
です。
1.RstudioでSweaveする
これはRStudioで新規Sweaveファイルを開くだけの簡単な方法。documentclassから始まり,\end{document}で終るファイルが開かれる。Rの式や関数を<<>>==から@の中に記載し,Compile PDFボタンを押すだけ。Rに入力したコードも表示させたかったら,echo=TRUEのオプションを着けておく。プロット等の図版が欲しい場合は同様に,fig=TRUEのオプションも書いておく。
\documentclass{article} \begin{document} \SweaveOpts{concordance=TRUE} <<echo=T,fig=T>>== result.aov summary(result.aov) plot(iris$Sepal.Length,iris$Sepal.Width) @ \end{document}
結果はこちらにあるとおり。図のファイルは自動的にPDFファイルを作ってくれたりするから大変便利。
ただし,日本語入力等には対応していないし,時々うまく行かないこともあるから,自分でソースを見て修正をかけたほうが良いかも。その場合は,コンソールで
Sweave(ファイル名,encoding="utf-8")
とし,texファイルを出力させる。直すべきところとして,
- スタイルファイル,Sweaveとaeをとってくる必要がある。こちらのサイトを参照。
- documentclassを{jsarticle}に。なんなら[uplatex]で。
- usepackage{graphicx}を追加。
- PDFをincludegraphicsするときにはBounding Boxが必要。
このへんで対応できるかなと。
ところで,コンパイルはuplatexで,というのがこれからのスタンダードのようだし,いろいろエラーがでたり書き直すのも面倒,ということもあるでしょう。自分のTeX書式テンプレートを用意しておいて,そこにRの結果等を書き込みたいな,と言う場合には次の2.や3.の方法を使いましょう。
2.xtableパッケージのxtable関数
これはもうそのまま,次のコードを走らせればすぐにわかる。
library(xtable) xtable(summary(iris)) result.aov<- aov(Sepal.Length~Species,data=iris) xtable(summary(result.aov))
プロンプトにTeXのコードがでてきたと思うので,それを自分のTeXテンプレートに書けばOKなわけだ。xable関数は色々な書式に対応したテーブルを書き出してくれる。
3.psychパッケージの様々な関数
これが本題。psychパッケージの中に入っているいくつかの関数で,自動的に表を出力してくれるのがありがたい。関数はそれぞれ次の通り。
- df2latex…データフレームをTeXにしてくれる
- cor2latex…相関行列をTeXにしてくれる
- fa2latex…因子分析の結果をTeXにしてくれる
- omega2latex…信頼性係数ωの情報をTeXにしてくれる
- irt2latex…項目反応理論の結果をTeXにしてくれる
- ICC2latex…ICCの情報をTeXにしてくれる
ソースコードは次のような感じ。上のxtableパッケージの結果と合わせてコンパイルしたtexソース,PDFも資料として上げておきます。
# data.frame to LaTeX df2latex(Thurstone,rowlabels=FALSE,apa=FALSE,short.names=TRUE, caption="Thurstone Correlation matrix") # data.frame to LaTeX df2latex(Thurstone,heading="Thurstone Correlation matrix in APA style") # cor matrix to LaTeX cor2latex(Thurstone) # cor matrix to LaTeX cor2latex(sat.act,short.names=FALSE) # results of FA to LaTeX fa2latex(fa(Thurstone,3),heading="Factor analysis from R in quasi APA style") # omega to LaTeX f omega2latex(f,digit=2,rowlabels=TRUE,apa=TRUE,short.names=FALSE,cumvar=FALSE,cut=0.2, font.size ="scriptsize", heading="An omega analysis table from the psych package in R", caption="omega2latex",label="default") # IRT to LaTeX d9 test test irt2latex(test,digits=2,rowlabels=TRUE,apa=TRUE,short.names=FALSE, font.size ="scriptsize", heading="An IRT factor analysis table from R",caption="fa2latex",label="default") # ICC to LaTeX icc.x icc.x ICC2latex(icc.x,digits=2,rowlabels=TRUE,apa=TRUE,ci=TRUE, font.size ="scriptsize",big.mark=NULL, drop.na=TRUE, heading="A table from the psych package in R", caption="ICC2latex",label="default",char=FALSE)
ちなみにTeXとは関係ないけど,psychパッケージは因子分析の図を書いてくれるfa.diagram関数や,fa.plot関数ってのもあるから面白いねえ。アップデートもしっかりあるし,今後も展開に期待したいパッケージの一つです。
fa.diagram(fa(Thurstone,3)) fa.plot(fa(Thurstone,3))
追記 Texlive2013にはXeLaTeXというUTF-8対応のtexがあるので,これを使えばRstudioのSweaveからも日本語でコンパイルできるよ,との情報をいただきました。ありがとうございました。