Sweave

Sweaveオプション

Sweaveのチャンクにオプションを与えることができる。あらかじめ、文章全体の既定値を設定しておきたい場合は、 \SwaveOpts{} の中に書いておく。1つ1つのチャンクに個別のオプションをつけるときは、 <<>> の中に書く。

オプション 機能 使用のコツ
echo 標準出力をそのまま出力 文章に表示したくないときはFLASEにする
eval コードを実行 SweaveOptsでTRUE/FALSEを切り替えると、TeX文書のみかコードの実行結果こみかを切り替えられる
results 実行結果 texにすると外部ファイルとして保存。表を入れるときに使う。
include 図ファイルの挿入 FALSEにするとどうなる?(要検証)
fig 図の出力 グラフィック出力をファイル化
width/height サイズ指定 図の横または縦のサイズ指定(単位はインチ)
eps/pdf 図ファイルの形式 両方ともTRUEにすべき

これらの他にもprint,term.split,strip.white,prefix,prefix.stringがあるが、私は使わない。splitをTRUEにすると、別ファイルとして出力される。図がincludegraphicsで挿入されるとき、その幅は、Ginというパラメータで決定される。

\setkeys{Gin}{width=0.8\textwidth}

Rnwファイルの作成

essのnoweb-modeにより、楽にRnwを書くことができる。

最低限のキーバインド

キー 機能
M-n s Rnwからtexファイルの変換
M-n l texのコンパイル→pdfの作成
M-n x \Sexpr{}の挿入

図のサイズを変更

図のサイズを変更するには、Rに渡すパラメータを

<<fig=TRUE,echo=TRUE,width=6,height=3>>=
plot(...)
@

という風に指定する。LaTeX2e上でincludegraphicsのwidthパラメータを制御したい場合は、

\setkeys{Gin}{width=0.8\textwidth}

このGinの値を変更すればよいらしい(未確認)。その他の方法として、 include=FALSEと組み合わせて明示的に\includegraphicsコマンドを使うことが できるらしい(未確認)。

表の作成

チャンクのオプションで resulttex にセットして、 print.xtable() を使うかな。

ありがちなミス

FAQからの抜粋

右シングルクオーテンションマークの文字化け

TeXのソースはASCIIだけど、utf-8にしかない文字が混入すると、文字化けする。 右シングルクオーテンションマークによる文字化けを回避するには、

の3通り。

makeによる自動化

Makefileを作成する。

TEX = /usr/bin/platex
R = /usr/bin/R
XDVI = /usr/bin/xdvi

.SUFFIXES:.Rnw

.tex.dvi:
        $(TEX) $<
        $(XDVI) -unique $@

.Rnw.tex:
        $(R) CMD Sweave $<

これで、

$ make tmp.dvi

などと実行すると、tmp.Rnwからtmp.texが作成されてtmp.dviが出力される。 .tex.dvi の部分はサフィックスルルールとよばれ、 *.tex から *.dvi が作成 されることを指示している。サフィックスルールの適用対象拡張子は、 .SUFFIXES: で指定する。 $< は内部マクロの一つで、依存ファイルの先頭ファ イル名に展開される。xdviにuniqueオプションをつけると、すでにxdviが起動 している場合はそれを更新してくれ、そうでない場合はxdviを起動してくれる。 $@ はターゲットファイルが展開される内部マクロ。このMakefileを使えば、 ess-noweb-modeに頼らなくても、yatex-modeのみでRnwファイルを編集できる。

Rnwファイルの先頭に

%#!make tmp.dvi

と書けば、C-c tjでコンパイルできる。

サンプル

%#!make tmp.dvi
\documentclass{article}
\usepackage{graphicx}
\usepackage{color}
\usepackage{Sweave}
\DefineVerbatimEnvironment{Sinput}{Verbatim}{formatcom={\color{blue}}}
\DefineVerbatimEnvironment{Soutput}{Verbatim}{formatcom={\color{red}}}
\begin{document}
This is just test.

<<echo=TRUE>>=
runif(10)
@

\begin{figure}
<<fig=TRUE,echo=TRUE>>=
data (airquality)
boxplot(Ozone ~ Month , data = airquality)
@
 \caption{This is test}
\end{figure}
\end{document}

noweb-modeになっているので、M-x noweb-modeを実行すると、no-web-modeがア ンロードされた。次に、M-x yatex-modeを実行して、C-c tjを実行すると、 xdviに下記のように表示される。

ess-noweb-modeでyatex-modeを使う

(defun Rnw-mode ()
  "Major mode for editing Sweave(R) source.
See `noweb-mode' and `R-mode' for more help."
  (interactive)
  (require 'ess-noweb)
  (noweb-mode 1)
  (noweb-set-doc-mode 'yatex-mode)
  (noweb-set-code-mode 'R-mode))

ess-noweb-modeでは、M-n sでSweaveが実行され、M-n lでLaTeXが実行される。 noweb-set-doc-modeをyatexにすることにより、yatexのキーバインドでLaTeX原 稿を書くことができる。

日本語を使う

日本語環境でSweaveを使うには、

LANG=ja_JP.euc R CMD Sweave hoge.Rnw

としないと、euc-jpのTeXソースを得られない。

Sinput環境の幅

Rの出力は、options(width=40)などで短くしたり、逆に長くしたりできるが、 これは、Sweaveでも反映され、echo=TRUEで出力されたRの式は、 options(width=xx)で設定した長さに整形される。


更新:2010年 1月 26日 火曜日 14:32:14 JST   Top