トップ «前の日記(Feb 07, 2010 (Sun)) 最新 次の日記(Mar 22, 2010 (Mon))» 編集


Feb 08, 2010 (Mon)

{}

_ Rapache (mod_r) を使って R で CGI を書くよ。グラフ画像出力編

前回のつづきです。前回は rapache の設定と簡単なCGIを作ってみました。今度は画像を出力して表示する CGI を作ります。内容は、乱数を適当に作ってヒストグラムを作画するCGIです。画像はランダムなファイル名で保存します。

# Functions
header <- function(contenttype) {
  setContentType(contenttype)                                                   
}
html.head <- function(content) { 
  cat("<head>\n")
  cat(content)
  cat("</head>\n") 
}
html.body <- function(content) {                                                
  cat("<body>\n")                                                               
  cat(content)                                                                  
  cat("</body></html>\n")                                                       
}                                                                               
randomFileName <- function(prefix, postfix) {                                   
  filename <- paste(                                                            
    prefix,                                                                     
    sprintf("%08d", as.integer(runif(1, 0, 10^7))),                             
    postfix,                                                                    
    sep=""                                                                      
  )                                                                             
  return(filename)                                                              
}                                                                               
                                                                            
# Main                                                                          
image_dir <- "/var/www/images"                                                  
filename  <- randomFileName("hist_", ".png")                                    
filepath  <- paste(image_dir, filename, sep="/")                                
                                                                                
data <- rnorm(1000)                                                             

# output html                                                                   
header("text/html")                                                             
html.head("<title>Test</title>")                                                
                                                                                
png(filepath)                                                                   
hist(data)                                                                      
dev.off()                                                                       
                                                                                
html.body(                                                                      
  paste(                                                                        
    '<img src="/images/',                                                       
    filename,                                                                   
    '">',                                                                       
    sep=""                                                                      
  )                                                                             
)

リロードすると画像が変わるのがわかると思います。次回はもっと役に立つものを作ってみます。

寧々さんかわいいです。

Tags: R
{}

_ Rapache (mod_r) を使って R で CGI を書くよ。テンプレートエンジンBrew編

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

こんなときは、テンプレートエンジンを使って、HTMLを作る部分とRのコードをなるべく分けるのが良いですね。R にも Ruby でいうところの erb のようなテンプレートエンジンがあります。今回は、brew というテンプレートフレームワークを使います。

brewのインストールと設定

まず brew をインストールします

sudo R
install.pakcages("brew")
q()

次に apache の設定をします。

sudo mkdir  /var/www/brew
sudo jed /etc/apache2/sites-available/default 

RHandler に brew を設定します。

    # brew
        <Directory /var/www/brew>
          #SetHandler r-handler
          SetHandler r-script
          RHandler brew::brew
        </Directory>

前回のコードを brew を使って書き直してみます。まずメインのコードです。

cd  /var/www/brew
sudo jed index.r

ほぼHTMLですね。プロット部分を別なファイル hist.r に追い出しています。brew() でこれを読み込みます。

<% setContentType('text/html') %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">;
<html>
  <head><title>Test</title>
</head>
<body>
  <% brew('/var/www/brew/hist.r') %>
</body>
</html>

プロットを描画するコード 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()
%>
<img src="/images/<%=filename%>">

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

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

Tags: R

トップ «前の日記(Feb 07, 2010 (Sun)) 最新 次の日記(Mar 22, 2010 (Mon))» 編集

Google
 
Web itoshi.tv

リンクは誰にも妨げられないあなたの権利です。お好きにどうぞ。 CC 表示2.1 日本
このサイトの各種商品のリンクは Amazonアソシエイト楽天アフィリエイト を利用している場合があります。