トップページ -> 研究道具箱と教材 -> Ruby による Web/データベース・プログラミング -> JRuby から R の機能を呼び出す (rsruby を使用)
[サイトマップへ]  

JRuby から R の機能を呼び出す (rsruby を使用)

この Web ページで行うこと


rsruby のインストール (Install rsruby)

Ubuntu でのインストール手順 (Install rsruby on Ubuntu System)

  1. Ubuntu で Ruby 処理系のインストール

  2. Ubuntu で R 処理系のインストール

  3. JRuby のインストール

    ◆ rbenv を使う場合の実行手順例

    rbenv install --list
    rbenv install jruby-1.6.8
    rbenv global jruby-1.6.8
    rbenv rehash
    

  4. gem を用いて rsruby のインストール
    sudo gem install --include-dependencies rsruby  -- --with-R-dir=/usr/lib/R --with-R-include=/usr/share/R/include --with-opt-dir=/usr/share/R
    

試しに使ってみる (Try to use rsruby)

Ruby から R の機能を呼び出す例 (invoke R functions from Ruby)

R を呼び出して,CSV ファイルの読み込みと散布図の描画を行ってみます.ここでの テスト用データは,「R のグラフ作成」に記述している Book1.csv を使っています

◆ Ubuntu の場合の実行手順例

  1. Book1.csv をダウンロードし /tmp に置く

  2. 端末を開き、次のように実行してみる

    参考Webページ https://kenai.com/projects/jruby/pages/PerformanceTuning

    export R_HOME=/usr/lib/R
    ulimit -s unlimited
    irb 
    require 'rubygems'
    require 'rsruby'
    r = RSRuby::instance
    r.eval_R(<<-RCOMMAND)
      X <- read.table("/tmp/Book1.csv", header=TRUE, sep=",", na.strings="NA", dec=".", strip.white=TRUE);
      plot( X[,c("seq")], X[,c("USD")] )
      pdf("hoge.pdf")
      plot( X[,c("seq")], X[,c("USD")] )
      dev.off()
    RCOMMAND
    

  3. 実行結果の例


Ruby から R に配列データを渡す (pass an array date as an argument from Ruby to R)

Ruby で連想配列を作り,それを R に渡して,散布図を書きます.

◆ Ubuntu の場合の実行手順例

export R_HOME=/usr/lib/R
ulimit -s unlimited
irb

require 'rubygems'
require 'rsruby'

D = { "a"=>[1, 2, 3, 4, 5], "b"=>[100, 110, 105, 120, 125] }
r = RSRuby::instance
r.eval_R(<<-RCOMMAND)
# write a graph in a window 
     A <- matrix( c( #{D["a"].join(",")} ), 1, #{D["a"].size} )
     B <- matrix( c( #{D["b"].join(",")} ), 1, #{D["b"].size} )
     plot(A, B)
# write a graph in a PDF file
     pdf("result.pdf", paper="a4")
     A <- matrix( c( #{D["a"].join(",")} ), 1, #{D["a"].size} )
     B <- matrix( c( #{D["b"].join(",")} ), 1, #{D["b"].size} )
     plot(A, B)
     dev.off()
RCOMMAND