2010/02/08

! brewのインストールと設定

前回は寧n、いえ、なんでもないです、前回のコードでは、cat() を使ってがんばってHTMLタグを出力していました。これは気持ち悪いです。RのコードとHTMLのコードを分けておかないと、どちらかに変更があった場合に、お互いの影響に配慮しながら修正をしなければならなくなります。これは面倒ですね。

こんなときは、テンプレートエンジンを使って、HTMLを作る部分とRのコードをなるべく分けるのが良いですね。R にも Ruby でいうところの erb のようなテンプレートエンジンがあります。今回は、[[brew|http://cran.r-project.org/web/packages/brew/index.html]] というテンプレートフレームワークを使います。

まず brew をインストールします
<<<
sudo R
install.pakcages("brew")
q()
>>>

次に apache の設定をします。
<<<
sudo mkdir /var/www/brew
sudo jed /etc/apache2/sites-available/default
>>>
RHandler に brew を設定します。
<<<
# brew

#SetHandler r-handler
SetHandler r-script
RHandler brew::brew

>>>

前回のコードを brew を使って書き直してみます。まずメインのコードです。
<<<
cd /var/www/brew
sudo jed index.r
>>>
ほぼHTMLですね。プロット部分を別なファイル hist.r に追い出しています。brew() でこれを読み込みます。
<<<
<% setContentType('text/html') %>
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">;

Test


<% brew('/var/www/brew/hist.r') %>


>>>

プロットを描画するコード hist.r は以下の通り。ほぼ R のコードですね。このコードは画像を作り、最終的にはその画像のパスが入った img タグを作ります。
<<<
<%
randomFileName <- function(prefix, postfix) {
filename <- paste(
prefix,
sprintf("%08d", as.integer(runif(1, 0, 10^7))),
postfix,
sep=""
)
return(filename)
}

image_dir <- "/var/www/images"
filename <- randomFileName("hist_", ".png")
filepath <- paste(image_dir, filename, sep="/")

data <- rnorm(1000)
png(filepath)
hist(data)
dev.off()
%>

>>>

http://localhost/brew/index.r にアクセスすると前回と同じようにヒストグラムが表示されます。リロードするとグラフが変わるのを確認してみてください。

これで「HTMLを組む」コードと「計算しプロットを作図する」コードがだいぶ分かれて見通しが良くなりました。次回こそなにか役に立つものを作ってみたいと思います。