RとJava
Rとjavaをつなげるパッケージ.非常に有用なパッケージだと思われますが インストール,運用ともに情報が少ないようです.
Fedora core 1上で R-1.9.0にインストールしてみました.まだ,classpathの設定でつまって動きませんが,Vine では,swing,awt以外はうごいたので,じきにうまくいくでしょう.riki 2004-04-25 (日) 23:21:22
CLASSPATHの設定とLD_LIBRARY_PATHの設定をしたら, とりあえず下記テストコードまではうまくいきました.riki 2004-04-26 (月) 17:45:08
下記を実行してSJavaのインストールする。この時、-cを忘れないようにする。-cを忘れると、必要なシンボリックリンクができず、JavaからRを呼ぶときに失敗してしまう。
>R INSTALL -c SJava_0.67-3.tar.gz
例えば, .bash_profileに下記を追記
LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/lib/R/library/SJava/libs:/usr/java/j2sdk1.4.2_04/jre/lib/i386:/usr/java/j2sdk1.4.2_04/jre/lib/i386/client
例えば ,.bash_profileに下記を追記
SJAVA=/usr/lib/R/library/SJava CLASSPATH=${CLASSPATH}:/usr/java/j2sdk1.4.2_04/lib:${SJAVA}:${SJAVA}/Jars/Environment.jar:${SJAVA}/Jars/antlr.jar:${SJAVA}/Jars/jas.jar:${SJAVA}/Jars/jhall.jar:.
>library(SJava) >.JavaInit() >.Java("java.lang.System", "getProperty", "java.class.path") >names(.Java("java.lang.System", "getProperties"))
Simon's PagesにSJavaをMacOS Xで動かすパッチがあります。 ここから SJava_0.65-X.tar.gzをもらってきて、(R-1.9.0なら)
sudo /Library/Frameworks/R.framework/Resources/bin/R INSTALL -c ~/Desktop/SJava_0.65-X.tar.gz
で普通にインストールできます。 ただし、Apple JavaのDeveloper Previewとかいろいろ試している人は、
/System/Library/Frameworks/JavaVM.framework/Headers/jni.h
のシンボリックリンクの実体がなくなってたりしますので、ADCなどから適宜DeveloperバージョンのJavaをとってきてインストールするなどして実体がある状態で実行しましょう。
なお、javacなどを使うときのCLASSPATHは、バージョンが若干古いため、
SJAVA=/Library/Frameworks/R.framework/Resources/library/SJava/ CLASSPATH=.:${SJAVA}:${SJAVA}/org/omegahat:${SJAVA}/org/omegahat/Jars/Environment.jar:${SJAVA}/org/omegahat/Jars/antlr.jar:${SJAVA}/org/omegahat/Jars/jas.jar:${SJAVA}/org/omegahat/Jars/jhall.jar:
とかになります。
一応、VectorとかSystem.outとかは正常に動いているようですが、awt.Windowとか、awt.Frameのコンストラクタを呼ぶと固まります...(Java 1.4.2)。 RJavaDeviceがうまく動けば日本語が通るかもしれないと期待したんですが...
import org.omegahat.R.Java.*; public class REvalSample { public static void main(String [] args) { String [] rargs = {"--slave", "--vanilla"}; System.out.println("Sample program to call R engine from Java"); ROmegahatInterpreter interp = new ROmegahatInterpreter(ROmegahatInterpreter.fixArgs(rargs), false); REvaluator e = new REvaluator(); Object val = e.eval("x <- sin(seq(0, 2*pi, length=30))"); val = e.eval("x * 2.0"); if (val != null) { double[] objects = (double[])val; for (int i=0; i<objects.length; i++) { System.err.println("("+i+") " + objects[i]); } } } }
CLASSPATHが正しく設定されていることを確認して、javacでコンパイル。
javac REvalSample.java
SJavaのインストール先が /usr/local/lib/R/library/SJava の場合は以下の様に入力する。
/usr/local/lib/R/library/SJava/scripts/RJava --class REvalSample
Error in dyn.load(x, as.logical(local), as.logical(now)) : unable to load shared library "/usr/local/lib/R/library/ctest/libs/ctest.so": /usr/local/lib/R/library/ctest/libs/ctest.so: undefined symbol: Rf_imax2 In addition: Warning message: package methods in options("defaultPackages") was not found Error in library(ctest) : package/namespace load failedのようなエラーが出てライブラリが読み込めていないようです。どこを設定すればよいのでしょう?m(__)m -- あなご 2004-05-26 (水) 11:09:55
Object val=e.eval("t.test(1:10,y=c(7:20))");のように変更したところ、
Unexpected Signal : 11 occurred at PC=0x401d6a83 Function name=unicode_length__4UTF8PCc Library=/usr/java/jdk1.3.1_08/jre/lib/i386/client/libjvm.soのエラーが出るようになりました。ちなみにj2sdk1.4.1_02でも同様です。なにか解決の糸口になるようなヒントはございませんでしょうか?<m(__)m> -- あなご 2004-05-26 (水) 19:06:05
JAVA_HOME=C:?j2sdk1.4.1_03 CLASSPATH=%CLASSPATH%; "C:?Program Files?R?rw1081?library?SJava"; "C:?Program Files?R?rw1081?library?SJava?org?omegahat?Jars?antlr.jar"; "C:?Program Files?R?rw1081?library?SJava?org?omegahat?Jars?Environment.jar"; "C:?Program Files?R?rw1081?library?SJava?org?omegahat?Jars?jas.jar"; "C:?Program Files?R?rw1081?library?SJava?org?omegahat?Jars?jhall.jar"; "C:?Program Files?R?rw1081?library?SJava?org?omegahat?Jars?ROmegahatExamples.jar" pathに以下を追加 C:?j2sdk1.4.1_03?jre?bin?client
Object val=e.eval("t.test(1:10,y=c(7:20))");を
Object val=e.eval("t.test(1:10,y=c(7:20))[[1]]");のように、変更すると実行時にもエラーがでなくなりました。上の方の戻り値はリスト、下のほうはベクトルです。戻り値の型によってエラーが出るようです。
CLASSPATH C:?Program Files?R?rw1081?library?SJava; C:?Program Files?R?rw1081?library?SJava?org?omegahat?Jars?antlr.jar; C:?Program Files?R?rw1081?library?SJava?org?omegahat?Jars?Environment.jar; C:?Program Files?R?rw1081?library?SJava?org?omegahat?Jars?jas.jar; C:?Program Files?R?rw1081?library?SJava?org?omegahat?Jars?jhall.jar; C:?Program Files?R?rw1081?library?SJava?org?omegahat?Jars?ROmegahatExamples.jar JAVA_HOME C:?j2sdk1.4.1_03 path C:?j2sdk1.4.1_03?jre?bin?client; C:?Program Files?R?rw1081?library?SJava?libs; C:?Program Files?R?rw1081?bin R_HOME C:?Program Files?R?rw1081 SJAVA C:?Program Files?R?rw1081?library?SJava
>library(iplots) # iplots パッケージのロード >data(iris) >attach(iris) >iplot(Sepal.Width, Petal.Width)
図 iplots 実行例
R 用汎用GUI(iplots, rJava, JavaGD を利用)
Mac 版は,http://www.rosuda.org/JGR/1.0/CRAN/JGR-1.0.dmg
Mac OS X 10.3 (Panther) download: - binary for CRAN release of R 2.0.0: JGR-1.0.dmg (ca. 2.3MB, updated 2004/10/18)
CRANよりソースが入手可能。
インストールにはヘッダファイルが必要なので、j2reではなくj2sdkをインストールしておく。環境変数JAVA_HOMEとPATHが正しくセットされているとする(他のJavaアプリが正しく動作していればおそらくOK)。スーパーユーザ権限でRを起動し、
> install.packages("JavaGD",contriburl="http://www.rosuda.org/R/") > install.packages("rJava",contriburl="http://www.rosuda.org/R/") > install.packages("JGR",contriburl="http://www.rosuda.org/R/")
と入力する。
mailing list(Developer 向け) 要登録
Java より R を呼び出す。CRAN より入手可。
上記の R と Java の連携技術の集大成のようなもの
いずれはなにかがある?