表題の通り、ScalaからRを使ってみます。
JRI(Java R Interface)というライブラリを使います。
手順説明を超適当に・・
まず、Rをインストールします。
環境変数R_HOMEにRをインストールしたディレクトリを設定します。
%R_HOME%\binにPathを通します。
OSがWindowsなら%R_HOME%\i386\binにもPathを通します。
Rを起動してinstall.packages('rJava')と入力してrJavaをインストールします。
(rJavaの中にJRIも含まれる)
とりあえずsbtプロジェクトを作ってProjectroot/lib/jriとかいうディレクトリ掘って、
%R_HOME%\library\rJava\jriにあるjri.jarをlibにProjectroot\libに、
%R_HOME%\library\rJava\jriにあるjri.dllをlibにProjectroot\lib\jriにピーコします。
sbtの設定は↓。残念ながらsbt 0.10系統用ではなくsbt 0.7.7用。
import sbt._class RScalaProject(info: ProjectInfo) extends DefaultProject(info) {
val scalaTest = "org.scalatest" % "scalatest" % "1.0"
override def unmanagedClasspath = {
super.unmanagedClasspath +++ Path.fromFile("/lib/")
}override def fork = Some(new ForkScalaRun {
val newPath1 = System.getProperty("java.library.path") + path("lib") / "jri"
override def runJVMOptions = super.runJVMOptions ++
Seq("-Djava.library.path=" + newPath1)override def scalaJars = buildScalaInstance.libraryJar :: buildScalaInstance.compilerJar :: Nil
})
}
試しにこんなコード書いて
package hoge3.0って表示されたらOK。
import org.rosuda.JRI.{ REXP, Rengine }object BootStrap extends App {
val engine = new Rengine(Array("--no-save"), false, null)
val result = engine.eval("1+2")
println(result.asDouble)sys.exit(0)
}
詳しくはJavaDoc見てちょ。
というよりJavaDoc以外殆ど資料が見当たりません。