RをScalaから呼び出し、Eclipseのspecs2でテストする

以外と面倒だったのでメモ

環境
  • Mac OS X 10.10
  • eclipse 4.4
手順 

Rのインストール

brew install r

scalaプロジェクトの作成

$ tree
.
├── build.sbt
├── lib
├── project
│		├── build.properties
│		└── plugins.sbt
└── src
		├── main
		│	 ├── resources
		│	 └── scala
		└── test
				├── resources
				└── scala

rjavaを使うためのライブラリをコピー

$ cp -rp ~/Library/R/3.2/library/rJava/jri/JRI.jar lib
$ cp -rp ~/Library/R/3.2/library/rJava/jri/libjri.jnilib lib

テストを作成

import org.specs2.mutable._
import org.specs2.runner.JUnitRunner
import org.junit.runner.RunWith
import org.rosuda.JRI.{ REXP, Rengine }

@RunWith(classOf[JUnitRunner])
class RTest extends Specification {
	"r " should {
		"r check" in {
			val engine = new Rengine(Array("--no-save"), false, null)
			val result = engine.eval("sum(c(1, 2, 3, 4))")
			engine.end()
			println(result.asDouble)
			result.asDouble mustEqual 10.0
		}

	}
}

build.sbt

name := "sample"

version := "1.0"

scalaVersion := "2.11.6"

javaOptions in run += "-Djava.library.path=" + System.getProperty("java.library.path") + ":lib"


libraryDependencies ++= Seq(
		"org.specs2" %% "specs2-core" % "3.6.2" % "test",
		"org.specs2" % "specs2-junit_2.11" % "3.6.2"
)

scalacOptions in Test ++= Seq("-Yrangepos")
 
retrieveManaged := true	// lib_managedへjarをコピーする

plugin.sbt

addSbtPlugin("com.typesafe.sbteclipse" % "sbteclipse-plugin" % "4.0.0")

build.properties

sbt.version=0.13.8

eclipse用変換

sbt eclipse
Rの設定
install.package("rJava")
Eclipseの設定
  1. Eclipseを起動し、プロジェクトを取り込む
  2. プロジェクトのプロパティからjava build path > libraries > add jarsでJRI.jarを追加
  3. JRI.jarの左三角マークをクリックしnative library locationにlibディレクトリを追加
  4. RTest.scalaを右クリックから、Debug Configuration > environment にR_HOMEを設定
R_HOME=/usr/local/Cellar/r/3.2.1_1/R.framework/Resources

これで実行できます