RとTeXのいい関係

最近のマイブームはTeXです。たぶん[改訂第6版] LaTeX2ε美文書作成入門がでて,Texlive2013ベースで導入するようになり,導入の敷居が低くなった=プラットフォーム化がすすんだことが原因の一つなんだろうと思う。これでうちみたいな文系心理の学生にも紹介しやすくなったし。

ところで,昨日必要に迫られて(理由はこちら)psychパッケージのヘルプを読んでいたら,ずいぶんと便利な関数があることを知った。psychパッケージの結果をTeX出力してくれる関数群だ。結果の美しさに感動したので,ついでにRとTeXのつなぎ方について,わかったことを書いておく。ここで紹介するのは,

  1. RstudioのSweave機能
  2. xtablesパッケージ
  3. 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からも日本語でコンパイルできるよ,との情報をいただきました。ありがとうございました。