統計処理ソフトウェアRをEclipseでJavaから使う

Rとは

  • 統計用途に特化されたオープンソースのプログラミング言語。
  • 数多くの統計パッケージが無償で公開されている
  • 欠点は、GUIが乏しかったり、大きすぎるデータ処理は難しい点

ダウンロード・インストール

  • こちらより最新版をダウンロード
    • 32bit/64bitは後に選択できる。
  • 以下のように下の方にインストールしとくと後々便利
C:\R\

Javaから使うために

  • rJavaというパッケージをRにインストールする。
install.packages('rJava')
  • ダウンロード元を聞かれるので、適当に一つ選ぶ。(日本ならtsukubaとか)

環境変数の設定

  • マイコンピュータを右クリックし、properties
  • advanced system settingsをクリックし、advancedタブ下にあるEnviroment variablesをクリック
  • 以下を参考に環境変数を設定

R_HOME: C:\R\R-2.13.0
PATH: %R_HOME%\bin\i386かx64 (使っているR.dllがあるところ)
R_DOC_DIR: %R_HOME%\doc
R_INCLUDE_DIR: %R_HOME%\include
R_SHARE_DIR: %R_HOME%\share

Eclipseの設定

  • Eclipseを管理者権限で起動。
  • File -> new -> Java Projectで、プロジェクト名を指定してnext
  • LibrariesのタブでAdd External Jarsで、先ほどインストールしたパッケージの中からIRI.jarを選択しFinish
    • 場所:インストールフォルダ\R-2.13.0\library\rJava\jri\IRI.jar
  • 作成したプロジェクトにC:\R\R-2.13.0\library\rJava\jriにあるjri.dllをコピー。

テスト(こちらのコードを改変)

  • JavaプログラムをEclipseで実行して、コンソールからRのコードを入力、実行
package jritest;
import java.util.Scanner;

import org.rosuda.JRI.REXP;
import org.rosuda.JRI.Rengine;
import org.rosuda.JRI.RMainLoopCallbacks;

public class nlr {
	static void print(String s) {
		System.err.println(s);
	}

	static void eval(Rengine r, String s) {
		r.eval(s, false);
	}

	public static void main(String[] args) {
		Scanner stdIn = new Scanner(System.in);
		String input;

		if (!Rengine.versionCheck()) {
			System.err.println("** Version mismatch - Java files don't match library version.");
			System.exit(1);
		}

		print("creating Rengine");

		Rengine re = new Rengine(args, false, null);

		print("Rengine created, waiting for R");

		// the engine creates R is a new thread, so we should wait until it's
		// ready
		if (!re.waitForR()) {
			System.out.println("Cannot load R");
			return;
		}

		print("R is running");
		print("Enter command for R (exit by typing \"end\")");
		while(true){
			  input = stdIn.nextLine();
			  if(input.equals("end"))
				  break;
			  System.out.println(re.eval(input));
		}
		
		print("stopping Rengine");

		re.end(); // stop the Rengine

		return;
	}
}
  • 入力例
data(iris)
pdf('/tmp/graph.pdf')
print(stripchart(iris[, 1:4], method = 'stack', pch = 16, cex = 0.4, offset = 0.6))
dev.off()
  • プロジェクトのフォルダにtmpフォルダが生成され、その中に、graph.pdfができる。