標籤:知識庫 hello title 三種方式 exp 成功 rvm replace cal
Java調用r主要有三種方式,rJava,rServer還有rCaller,這邊主要講用rJava調用
rJava是一個R語言和Java語言的通訊介面,通過底層JNI實現調用,允許在R中直接調用Java的對象和方法。由於rJava是底層介面,並使用JNI作為介面調用,所以效率非常高。在JRI的方案中,JVM直接通過記憶體直接載入RVM,調用流程績效幾乎無損耗,因此是非常高效串連通道,是R和Java通訊的首選開發包。
之前用R3.0.2,不知道是否是版本太高的原因,
利用rjava實現java調用R的過程中,像列印變數,這些都可以成功
String version = re.eval("R.version.string").asString();System.out.println(version);
定義變數的情況也可以
REXP x=re.eval("1:10");
System.out.println("REXP result = "+x);
re.eval("print(1:10/3)");
但是涉及到調用基本函數的時候,卻是總報null 指標的錯誤。
比如
re.eval("rnorm(10)");
double[] arr =re.eval("rnorm(10)").asDoubleArray();
或者是內建的測試代碼中的
REXP x;
re.eval("data(iris)",false);
System.out.println(x=re.eval("iris"));
進入正題,首先開啟R軟體,
install.packages("rJava")
如果library(rJava)不報錯,說明第一步成功了。
啟動jvm
.jinit()
s <- .jnew("java/lang/String", "Hello World!")
s
[1] "Java-Object{Hello World!}"
然後設定環境變數
CLASSPATH=D:\proSoftware\R-2.15.0\library\rJava\jri;
PATH=D:\proSoftware\R-2.15.0\bin\i386
R_HOME=D:\proSoftware\R-2.15.0\R-2.15.0\
將D:\proSoftware\R-2.15.0\library\rJava\jri下的三個jar包(JRIEngine.jar,JRI.jar,REngine.jar)拷到C:\Program Files\Java\jdk1.6.0_10\lib目錄下,即jdk目錄的lib下
開啟eclipse,建立Java project。同時將上述三個包匯入工程中。
D:\proSoftware\R-2.15.0\library\rJava\jri\examples目錄下有兩個內建測試代碼rtest.java和rtest2.java。
運行這兩個代碼,如果結果不報錯,說明調用成功。
運行之前記得run configurations中添加VM參數設定為 -Djava.library.path=D:\proSoftware\R-2.15.0\library\rJava\jri
R與java整合