ブログトップ 記事一覧 ログイン 無料ブログ開設

hamadakoichi blog このページをアンテナに追加 RSSフィード Twitter

2010-01-11

[][][] Java R Interface (JRI) を用い 統計解析環境 R を Java から使用する 01:24  Java R Interface (JRI) を用い 統計解析環境 R を Java から使用するを含むブックマーク  Java R Interface (JRI) を用い 統計解析環境 R を Java から使用するのブックマークコメント

統計解析・データマイニング環境の R を Java から使用する方法を以下に紹介する。

現在、RをJavaで使用する方法に関する文献は非常に少ないが参考サイトをまとめたものも下部に記述する。

rJava というPackageに含まれている Java R Interface (JRI) を用い R をJavaから呼び出すことができる。


※rJava:

 Download: http://www.rforge.net/rJava/files/

 SVN: svn://svn.rforge.net/rJava/

※以下、Eclipse 3.4.2の環境を例に説明する。

※また、EclipseR言語環境自体を使う方法はR を Eclipse で使うを参照。

統計解析環境 R のインストール・環境設定:

統計解析環境 R 自体のインストール・環境設定はR のインストール・環境設定を参照。

rJavaのインストール

※以下、Rをインストールしたフォルダ R_HOME = C:\R\R-2.10.1\ として説明する。

1. Rを起動し、rJava」パッケージをインストールする。

install.packages('rJava')


2. C:\R\R-2.10.1\library下に rJava フォルダが作成される。

f:id:hamadakoichi:20100111221239j:image

その下の C:\R\R-2.10.1\library\rJava\jri 下にjri.dll, JRI.jar が配置されている。

f:id:hamadakoichi:20100111221851j:image

Java Project の設定

1. ProjectのProperty->Java Build Path-> Librariesタブで、"External JARs"を選択。

f:id:hamadakoichi:20100111221852j:image

2. C:\R\R-2.10.1\library\rJava\jri 下の JRI.jar を追加。

3. Run -> Run Configuration

以下の変数を設定する。

Path: C:\R\R-2.10.1\bin

R_DOC_DIR: C:\R\R-2.10.1\doc

R_INCLUDE_DIR: C:\R\R-2.10.1\include

R_SHARE_DIR: C:\R\R-2.10.1\share

f:id:hamadakoichi:20100111235622j:image

4. Project直下にjri.dll (C:\R\R-2.10.1\library\rJava\jri)をコピー。

f:id:hamadakoichi:20100111235623j:image


Java Class Sample

Rとの接続は「Rengine」というClassが担い、assign()メソッドで値の受け渡しを行う。Rのコマンド実行はeval()メソッドで行う。動作確認のため以下にシンプルなサンプルを記述する。36の平方根を求めるプログラムで、結果は 6.0 となる。

import org.rosuda.JRI.REXP;
import org.rosuda.JRI.Rengine;
public class JriTest 
{
	public static void main(String[] args) 
	{
		Rengine engine = new Rengine(new String[]{"--no-save"}, false, null);
		engine.assign("a", new int[]{36});
		REXP result = engine.eval("sqrt(a)");
		System.out.println(result.asDouble());
		engine.end();
	}
}

実行結果

6.0

f:id:hamadakoichi:20100112010716j:image:w500

org.rosuda.JRI: http://www.rforge.net/org/docs/org/rosuda/JRI/package-summary.html


今後、JRI使用法や Google App Engine for Java (GAE/J)とのからみも今後紹介していきたいと思います。


補足:SVN設定

Rの SVNの設定手順も以下に紹介します。

Subversive Eclipse Plug-in インストール

Eclipseになじみのない人のために、SVNSubversive プラグインインストール設定も記述します。

1. Help -> Software Updates... を選択。Add Site押下。次のLocationをそれぞれ入力しOKを押下。

2. [Available Software]タブを選択

Location:

http://download.eclipse.org/technology/subversive/0.7/update-site/

http://www.polarion.org/projects/subversive/download/eclipse/2.0/update-site/


3.svnと入力し「Subversive Site」と「SVN Connecters Site」の関連プラグインのみが表示させる。下記の5つのプラグインにチェックをして、[インストール]をクリックします。

Subversive SVN Integration for Mylyn Project

Subversive SVN Term Provider

Subversive SVN Term Provider Localization

Subversive SVN Connecters

・SVNKit 1.2.2 Inplementation


参考:

Eclipse 3.4でのバーション管理方法(Subversion編) ?Eclipse 3.4入門?(3/4):CodeZine

no title

no title


Subversion リポジトリロケーションの追加

1. Window -> Open Perspective -> Others を選択。

2. "SVNリポジトリー・エクスプローラー"を選択しOK。

f:id:hamadakoichi:20100111025632j:image

3. "New Repository Location"ボタンをクリック、または、SVN Repository View を右クリックしてNew->Repository Locationを実行。

f:id:hamadakoichi:20100111025633j:image

4. URL に以下のrJava SVN RepositoryのURLを入力し"Finish"押下。

 rJava SVN Repository:

 svn://svn.rforge.net/rJava/trunk

f:id:hamadakoichi:20100111031359j:image

5. SVNリポジトリーにrJavaのRepository Locationが表示され、利用できるようになります。

f:id:hamadakoichi:20100111031400j:image

参考:

rJava - Low-level R to Java interface - RForge.net

JRI - Java/R Interface - RForge.net

404 Not Found

ブログが見つかりません

Package rJava (PDF)

いー ドット ぷりんとすたっくとれーす: math/R をJava(Eclipse)から使う

Blogger Alliance | 404 Not Found

rJava - Low-level R to Java interface - RForge.net

文献:

Rによるデータサイエンス - データ解析の基礎から最新手法まで

Rによるデータサイエンス - データ解析の基礎から最新手法まで

Rによる統計解析

Rによる統計解析

Rグラフィックス ―Rで思いどおりのグラフを作図するために―

Rグラフィックス ―Rで思いどおりのグラフを作図するために―

The R Project for Statistical Computing

RjpWiki - RjpWiki

R言語 - Wikipedia

kharakhara 2010/07/11 12:32 scalaからRを呼ぶ方法を探していました。
解説されている方法で上手く動くようです。
Win XP上で下記のようにサンプルが作動しました。
ありがとうございます。

===============================================================================
c:\>set PATH=%PATH%;C:\R\R-2.9.2\bin;C:\R\R-2.9.2\library\rJava\jri

c:\>scala
Welcome to Scala version 2.7.7.final (Java HotSpot(TM) Client VM, Java 1.6.0_17)
.
Type in expressions to have them evaluated.
Type :help for more information.

scala> import org.rosuda.JRI.REXP
import org.rosuda.JRI.REXP

scala> import org.rosuda.JRI.Rengine
import org.rosuda.JRI.Rengine

scala> val engine = new Rengine(Array("--no-save"), false, null)
engine: org.rosuda.JRI.Rengine = Thread[Thread-2,5,main]

scala> engine.assign("a", Array(36))
res0: Boolean = true

scala> val result = engine.eval("sqrt(a)")
result: org.rosuda.JRI.REXP = [REAL* (6.0)]

scala> println(result.asDouble)
6.0

scala> engine.end

scala>

hamadakoichihamadakoichi 2010/07/12 00:55 > khara さん

どういたしまして。お役に立ててよかったです。

fijifiji 2010/07/19 19:36
RもJRIも初心者なもので、初歩的な質問で申し訳ございませんが色々調べても分からないので教えてください。
JRIで、自分で作ったfunctionを実行しようと試みているのですがどうやっても結果が取れません。どのようにするとよいのでしょうか?

assign関数とeval関数の使い方の問題だとは思うのですが、色々試しても戻りがnullになってしまいます。
※当然実行するコマンドが、sqrt(16)等なら正常値が戻ってきています。

【ソースコード】

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

public class Bussiness {
public double engine() {
double ret = 0;
REXP result = null;

Rengine engine = new Rengine(new String[] { "--no-save" }, false, null);
String command = "function(x){return(x+1)}";
engine.assign("function2",command);
result = engine.eval("function2(1)");
double ret2 = result.asDouble();
System.out.println("計算の結果は、 " + ret2 + " です。");

engine.end();

return ret;
}
}

お手数ですがよろしくお願いします。

kharakhara 2010/08/02 15:33 >fijiさん
engine.assign("function2",command);
だとfunction2には文字列(command)が設定されるのでは?
engine.assignのjavadocを見ると
r - contents as REXP. currently only raw references and basic types
(int, double, int[], double[], boolean[]) are supported.
となっているので、関数を渡すことが出来ないようです。
command = "function2 <- function(x) {return (x+1)}";
engine.eval(command);
というようなやり方しかないように思います。