※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

第2章

インストールと使い方

2.1 要求 第一に RSRuby をインストールする前に Ruby (http://www.ruby-lang.org/) が必要です。 RSRuby の現在のバージョンでは Ruby 1.8.4 だけでテストされていますが、1.8.x 系以前のバージョンでは動くでしょう。 また、動作確認済みの R 実行環境のも必要です。 R を --enable-R-shlib オプション付きでビルドすることで RSRuby は R の共有ライブラリとインタフェースを取れるようになります。 RSRuby の現在のバージョンでは R 2.2.1 だけでテストされていますが、以前のバージョンでも動くでしょう。

2.2 インストール インストールするには R と標準 ruby 拡張インストーラ setup.rb や rubugems を使って適切な構成でセットアップしていなくてはいけません。

1. まずは、R_HOME 環境変数が設定されていることを確認してください。私の Ubuntu linux ではこうなっています:

R_HOME=/usr/lib/R

また OS X ではこうです:

R_HOME=/Library/Frameworks/R.framework/Resources

2. Compile and install the Ruby ライブラリの setup.rb を使ってコンパイルとインストールをする場合はこうです。

libR 共有ライブラリ付きで R がインストールされている必要があります。 これは通常 R_HOME と同じになるでしょう.
cd rsruby
ruby setup.rb config -- --with-R-dir=/usr/lib/R
ruby setup.rb setup
sudo ruby setup.rb install

もし、rubygems を利用するなら R のインストールディレクトリを指定する必要があります。

gem install -- --with-R-dir=/usr/lib/R

もし RSRuby がコンパイルされないなら R ライブラリの設定パスが必要かもしれません。 以下のことがそろっている必要があります。( RPy のドキュメントから持ってきました):

  • R_HOME/bin/libR.so のリンクを /usr/local/lib か /usr/lib に作成すること、ldconfig を実行すること。
  • または、.bashrc (か環境変数)に以下を追加すること:
export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:R_HOME/bin
  • または、 /etc/ld.so.conf に次の行を追加すること
R_HOME/bin

そして、 ldconfig を実行すること。

3. 確認:

ruby setup.rb test

RSRuby はすべてのテストにパスしないといけない。 インストール時に setup.rb に適切なディレクトリ(home ディレクトリのような)を指定していれば root 権限が無くても実行できます。

ruby setup.rb --help

を実行すれば、詳細がわかります。

2.3 使い方: 簡単な例 RSRuby は irb でも動作します。サンプルを示します。:

\$irb -r rsruby
irb> r = RSRuby.instance
     => #<RSRuby:0xb7cdec04>

要求された rsruby をモジュールからロードするとき、 RPy と違うのは R インタプリタを実行していないことです。RSRuby.instance を呼んで、R インタプリタを実行します。 これで r オブジェクトに保存され、参照を返します。 1つの R インタプリタだけが実行され、 RSRuby は標準ライブラリの Singleton モジュールを利用します。 これは、RSRuby.new を RSRuby.instance に置き換えています。 RSRuby.instance への更なる呼び出しはオリジナルのインタプリタオブジェクトを返します。 R 関数を呼ぶと R インタプリタオブジェクトを作ります。 次の例の R 関数 wilcox.test では、引数として2つの Ruby 配列を設定しています。 これらの配列は RSRuby によって R に変換されます。R メソッドから返された list は Ruby Hash に変換されます。 第4章で変換手順の詳細を示します。

irb> r.wilcox_test([1,2,3],[4,5,6])
    => {"p.value"=>0.1,
        "null.value"=>{"mu"=>0.0},
        "data.name"=>"c(1, 2, 3) and c(4, 5, 6)",
        "method"=>"Wilcoxon rank sum test",
        "alternative"=>"two.sided",
        "parameter"=>nil,
        "statistic"=>{"W"=>0.0}
       }