2014-09-14

JRI, Java R Interface を試す

R で GUI が必要になる場合、Tcl/Tk を標準で利用できますが、一般的には R のスクリプト上で Tcl/Tk の GUI を定義することになります。簡単な GUI を必要とするアプリケーションであれば、このようなやり方で用をなす場合もありますが、メインのプログラミング環境が別にあって、数値計算をするときに R の機能を利用したい場合もあります。

今回は Java から R の利用を可能にする JRI について紹介します。

使用環境

使用している PC の環境は以下の通りです。

OS (Linux)
CentOS 7 (x86_64)
R パッケージ
R-core-3.1.1-3.el7.x86_64.rpm(CentOS 7 の RPM パッケージ)
Java の主要な開発環境
java-1.7.0-openjdk-1.7.0.65-2.5.1.2.el7_0.x86_64.rpm(CentOS 7 の RPM パッケージ)
java-1.7.0-openjdk-devel-1.7.0.65-2.5.1.2.el7_0.x86_64.rpm(CentOS 7 の RPM パッケージ)
Eclipse Standard 4.4 (eclipse-standard-luna-R-linux-gtk-x86_64.tar.gz)

JRI について

JRI, Java R Interface は R を Java から使用するためのインターフェイスです。JRI は単体で入手することもできますが、rJava というパッケージに JRI が含まれていますので、それを利用します。

rJava は、CentOS 7 の RPM パッケージとしては提供されていませんので、以下のように R を起動して、CRAN からソースをダウンロードして、それをコンパイルして利用します。したがって、上記 R と Java の開発環境の他に、C (gcc) による開発環境を利用できる必要があります。

$ R

R version 3.1.1 (2014-07-10) -- "Sock it to Me"
Copyright (C) 2014 The R Foundation for Statistical Computing
Platform: x86_64-redhat-linux-gnu (64-bit)

R は、自由なソフトウェアであり、「完全に無保証」です。 
 一定の条件に従えば、自由にこれを再配布することができます。 
 配布条件の詳細に関しては、'license()' あるいは 'licence()' と入力してください。 

R は多くの貢献者による共同プロジェクトです。 
 詳しくは 'contributors()' と入力してください。 
 また、R や R のパッケージを出版物で引用する際の形式については 
 'citation()' と入力してください。 

 'demo()' と入力すればデモをみることができます。 
 'help()' とすればオンラインヘルプが出ます。 
 'help.start()' で HTML ブラウザによるヘルプがみられます。 
 'q()' と入力すれば R を終了します。 

> install.packages("rJava", dependencies = TRUE)
Installing package into ‘/home/bitwalk/R/x86_64-redhat-linux-gnu-library/3.1’
(as ‘lib’ is unspecified)
 --- このセッションで使うために、CRAN のミラーサイトを選んでください --- 
CRAN mirror 

  1: 0-Cloud                        2: Argentina (La Plata)       
  3: Argentina (Mendoza)            4: Australia (Canberra)       
  5: Australia (Melbourne)          6: Austria                    
  7: Belgium                        8: Brazil (BA)                
...
(省略)
...
 95: USA (TN)                      96: USA (TX 1)                 
 97: USA (WA 1)                    98: USA (WA 2)                 
 99: Venezuela                    100: Vietnam                    


Selection: 50
 URL 'http://cran.ism.ac.jp/src/contrib/rJava_0.9-6.tar.gz' を試しています 
Content type 'application/x-gzip' length 567515 bytes (554 Kb)
 開かれた URL 
==================================================
downloaded 554 Kb

* installing *source* package ‘rJava’ ...
**  パッケージ ‘rJava’ の解凍および MD5 サムの検証に成功しました 
checking for gcc... gcc -m64 -std=gnu99
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables... 
checking whether we are cross compiling... no
checking for suffix of object files... o
...
(省略)
...
installing via 'install.libs.R' to /home/bitwalk/R/x86_64-redhat-linux-gnu-library/3.1/rJava
** R
** inst
** preparing package for lazy loading
** help
*** installing help indices
  converting help for package ‘rJava’
    finding HTML links ...  完了 
    Exceptions                              html  
    J                                       html  
    accessOp                                html  
    aslist                                  html  
    clone                                   html  
    instanceof                              html  
    jarray                                  html  
    jarrayRef-class                         html  
    java-tools                              html  
    javaImport                              html  
    jcall                                   html  
    jcast                                   html  
    jcastToArray                            html  
    jcheck                                  html  
    jclassName                              html  
    jengine                                 html  
    jequals                                 html  
    jfield                                  html  
    jfloat-class                            html  
    jfloat                                  html  
    jinit                                   html  
    jmemprof                                html  
    jnew                                    html  
    jnull                                   html  
    jobjRef-class                           html  
    jpackage                                html  
    jrectRef-class                          html  
    jreflection                             html  
    jserialize                              html  
    jsimplify                               html  
    loader                                  html  
    new                                     html  
    rep                                     html  
    show                                    html  
    toJava                                  html  
    with                                    html  
** building package indices
** testing if installed package can be loaded
* DONE (rJava)

 ダウンロードされたパッケージは、以下にあります 
  ‘/tmp/RtmpEdb1KU/downloaded_packages’ 
> 

コンパイルしたパッケージは、$HOME/R/x86_64-redhat-linux-gnu-library/3.1/ 以下にあります。

Eclipse の設定

まだ JRI を使いこなせていない状況ですので、参考サイト [1], [2] に掲載されているサンプルを参考にして次のようにしました。

List: SampleR.java
package jritest;

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

public class SampleR {
    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();
    }
}

Eclipse のプロジェクトのビルドバスの設定画面で、外部 JAR に、rJava のインストールでコンパイルされた、JRI.jar, JRIEngine.jar, REngine.jar を加えました。

メニューの Run → Run Configurations...で VM の引数にライブラリ libjri.so へのパスを指定します。このパスは実際、JRI.jar などと同じディレクトリです。

-Djava.library.path=./lib:/home/bitwalk/R/x86_64-redhat-linux-gnu-library/3.1/rJava/jri

サンプルの実行結果は、もちろん 6.0 です。もう少し使い込んで、機会があれば、より具体的なサンプルを紹介したいと考えています。

参考サイト

  1. RとJava - RjpWiki
  2. JavaからR言語を呼び出せる環境の構築 - Qiita
  3. Overview RoSuDA R packages API

0 件のコメント: