アクトインディ開発者ブログ

子供とお出かけ情報「いこーよ」を運営する、アクトインディ株式会社の開発者ブログです

Ruby + R

こんにちは。
masudaです。

今回はRubyでRを使うというのをやってみようかなと思います。

RはWikipediaのよると「オープンソースフリーソフトウェアの統計解析向けプログラミング言語、及びその開発実行環境である。」そうです。

RubyからRを呼び出すためのRSRubyというgemがあります。
これがあるとお手軽にRubyからRの機能を呼び出すことが可能です。

まずはR本体をインストールします。

次にRubyGemでRSRubyをインストールします。
オプションでRの場所を指定してあげます。

Macだとこのようになります。

sudo gem install rsruby -- --with-R-dir=/Library/Frameworks/R.framework/Resources

使い方

require 'rubygems'
require 'rsruby'

r = RSRuby::instance

r.eval_R(<<-RCOMMAND)
  # 実行したいコマンド
RCOMMANDS

たったこれだけです。

x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]

r.eval_R(<<-RCOMMANDS)
  pdf("~/foo.pdf")

  x <- matrix(c(#{x.map do |a| '"' + a + '"' end.join(',')}), 1, #{x.size})
  y <- matrix(c(#{y.map do |b| '"' + b + '"' end.join(',')}), 1, #{y.size})

  plot(x, y, xlim = c(1, 10), ylim = c(1, 10))

  dev.off()
RCOMMANDS

上記を実行することで、PDFでグラフが作成されます。
PDFだと何かと便利なので、PDFにしています。

RubyのArrayからRのArrayには自分はいつも上記のような書き方をしています。
もっと良い書き方があるのかもしれません。

私がRをきちんと学んでいないからR単体だけでできるのかもしれませんが、Rubyの強力な文字列処理とRの強力な統計処理、数値演算を手軽に融合できることが気に入っています。

Rを使っていらっしゃる方は是非一度お試しください。