Rserve とは, TCP/IP 接続できるサーバで,R の機能を、他のプログラムから使うことができるというものです. 詳しくは,http://www.rforge.net/Rserve/ を見てください.
R の機能を呼び出した結果は,Java 側の int, double, arrays, String, Vector や,その他の特定の R オブジェクトを扱うためのクラス(RBool, RList といったもので,RServe に付属のもの)のオブジェクトに格納される.
cooperative mode でのみ動く.このモードでは,(1) 1度に1つの接続しかできない. (2) 一連の接続では,同じ名前空間(name space)が使用される.
Rserve を rforge の http://www.rforge.net/Rserve/ からインストールするために,下記の関数を実行する.
install.packages("Rserve", repos="http://cran.rstudio.com/")
※ 「・・・を作成できません: 許可がありません」というエラーメッセージが出た場合には、 R システムを管理者の権限で起動し、このWebページの手順を最初からやり直す.
以下 /usr/local/lib/R/library/rJava 下にあるものとして説明を続ける
以下 /usr/local/lib/R 下にあるものとして説明を続ける
◆ Ubuntu での操作手順例
cd /usr/local/lib/R/library/rJava/jri/examples ./run rtest
◆ Ubuntu での操作手順例
cd /usr/local/lib/R/library/rJava/jri javac -cp .:examples:src/JRI.jar:JRI.jar examples/rtest.java LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/R/lib:/usr/local/lib/R/bin java -Djava.library.path=.: -cp .:examples:src/JRI.jar:JRI.jar rtest
library(Rserve) Rserve(args="--no-save")
※ もし,「library(Rserve)」の実行で, 「'Rserve' という名前のパッケージはありません」というようなエラーが出たときは 「install.packages("Rserve", repos="http://cran.rstudio.com/")」を実行してインストールする.
? Rserve
ここでの例は
としている.必要があれば,パッケージ名,クラス名を変えてください.
◆ Java ファイル「HelloWorld.java」の作成例
package hoge.hoge.com; import java.io.*; import java.awt.Frame; import java.awt.FileDialog; import java.util.Enumeration; import org.rosuda.JRI.Rengine; import org.rosuda.JRI.REXP; import org.rosuda.JRI.RList; import org.rosuda.JRI.RVector; import org.rosuda.JRI.RMainLoopCallbacks; public class HelloWorld { public static void main(String[] args) { // just making sure we have the right version of everything if (!Rengine.versionCheck()) { System.err.println("** Version mismatch - Java files don't match library version."); System.exit(1); } Rengine re=new Rengine(args, false, null); if (!re.waitForR()) { System.out.println("Cannot load R"); return; } try { REXP x1, x2, x3, x4; System.out.println(x1 = re.eval("rnorm(10)")); double d1[] = x1.asDoubleArray(); for ( int i = 0; i < 10; i++ ) System.out.println(d1[i]); System.out.println(x2 = re.eval("iris[[1]]")); double d2[] = x2.asDoubleArray(); for ( int i = 0; i < 50; i++ ) System.out.print(d2[i]+", "); System.out.println(x3 = re.eval("print(1:10/3)")); double d3[] = x3.asDoubleArray(); for ( int i = 0; i < 10; i++ ) System.out.println(d3[i]); System.out.println(x4 = re.eval("q()")); } catch (Exception e) { System.out.println("EX:"+e); e.printStackTrace(); } } }
◆ Ubuntu での操作手順例
cd /usr/local/lib/R/library/rJava/jri javac -cp .:examples:src/JRI.jar:JRI.jar examples/HelloWorld.java LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/R/lib:/usr/local/lib/R/bin java -Djava.library.path=.: -cp .:examples:src/JRI.jar:JRI.jar rtest
以下、書きかけ
c.voidEval("library(maptools)")
c.oidEval()
Eclipse を使って Java のプログラムを開発することを薦めます. 先ほどダウンロードして解凍した「Java クライアント」のファイルのうち, src\client\java 下のファイルをプロジェクトにインポートしてください.
Eclipse で HelloWorld.java を右クリックし,「実行」→「Java アプリケーション」
※ 確かに Windows + Eclipse 上で動いたという画面を載せておきます.
【参考】もし,「Cannot connect ...」というエラーが出たときは, 原因として,「Rserver の起動」を忘れているという可能性が考えられる.
Rserve版をダウンロードしたいときは、 http://www.rforge.net/Rserve/ から 配布されている ファイルをダウンロード.
解凍して出来たファイルを,今度の作業で使うので, 分かりやすい名前のディレクトリに解凍しておくこと.
(参考)展開(解凍)すると,ファイルができる
(参考)src\client\java ディレクトリの下は,下記のようになっている.