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] に掲載されているサンプルを参考にして次のようにしました。
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 です。もう少し使い込んで、機会があれば、より具体的なサンプルを紹介したいと考えています。
参考サイト
- RとJava - RjpWiki
- JavaからR言語を呼び出せる環境の構築 - Qiita
- Overview RoSuDA R packages API
0 件のコメント:
コメントを投稿