金子邦彦研究室プログラミングR のプログラム例Java から R の機能を呼び出し (Rserve を使用)

Java から R の機能を呼び出し (Rserve を使用)

Rserve とは, TCP/IP 接続できるサーバで,R の機能を、他のプログラムから使うことができるというものです. 詳しくは,http://www.rforge.net/Rserve/ を見てください.

R の機能を呼び出した結果は,Java 側の int, double, arrays, String, Vector や,その他の特定の R オブジェクトを扱うためのクラス(RBool, RList といったもので,RServe に付属のもの)のオブジェクトに格納される.

Rserve のインストール

  1. R システムでの操作

    Rserve を rforge の http://www.rforge.net/Rserve/ からインストールするために,下記の関数を実行する.

    install.packages("Rserve", repos="http://cran.rstudio.com/")
    
  2. インストール終了の確認

    ※ 「・・・を作成できません: 許可がありません」というエラーメッセージが出た場合には、 R システムを管理者の権限で起動し、このWebページの手順を最初からやり直す.

  3. Rserve のファイルがインストールされたディレクトリを探す

    以下 /usr/local/lib/R/library/rJava 下にあるものとして説明を続ける

  4. R がインストールされたディレクトリを探す

    以下 /usr/local/lib/R 下にあるものとして説明を続ける

  5. 確認のため、付属のサンプルプログラムを動かしてみる

    Ubuntu での操作手順例

    cd /usr/local/lib/R/library/rJava/jri/examples
    ./run rtest 
    
  6. 今度は「run」を使わずに、付属のサンプルプログラムを動かしてみる

    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
    

使用法

  1. Rserver の起動
    library(Rserve)
    Rserve(args="--no-save")
    

    ※ もし,「library(Rserve)」の実行で, 「'Rserve' という名前のパッケージはありません」というようなエラーが出たときは 「install.packages("Rserve", repos="http://cran.rstudio.com/")」を実行してインストールする.

  2. (オプション) ヘルプの表示
    ? Rserve
    
  3. Java ファイル「HelloWorld.java」の作成

    ここでの例は

    としている.必要があれば,パッケージ名,クラス名を変えてください.

    ◆ 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
    



    以下、書きかけ

  4. (参考)その他のプログラムの例
  5. Eclipse での「Java クライアント」のインポート

    Eclipse を使って Java のプログラムを開発することを薦めます. 先ほどダウンロードして解凍した「Java クライアント」のファイルのうち, src\client\java 下のファイルをプロジェクトにインポートしてください.

  6. 実行結果の確認

    Eclipse で HelloWorld.java を右クリックし,「実行」→「Java アプリケーション」

    ※ 確かに Windows + Eclipse 上で動いたという画面を載せておきます.

    [image]

    【参考】もし,「Cannot connect ...」というエラーが出たときは, 原因として,「Rserver の起動」を忘れているという可能性が考えられる.

  7. (オプション) JavaDoc の確認

(オプション)Rserve最新版のダウンロードと解凍

Rserve版をダウンロードしたいときは、 http://www.rforge.net/Rserve/ から 配布されている ファイルをダウンロード.

  1. Rserveの Web ページを開く

    http://www.rforge.net/Rserve/

  2. Download/Files をクリック

    [image]
  3. 「Most Recent Snapshots」に並んでいるファイルから最新のファイルをクリックしてダウンロードする.
  4. ダウンロードしたファイルを展開(解凍)する

    解凍して出来たファイルを,今度の作業で使うので, 分かりやすい名前のディレクトリに解凍しておくこと.

    (参考)展開(解凍)すると,ファイルができる

    (参考)src\client\java ディレクトリの下は,下記のようになっている.