R與java整合

來源:互聯網
上載者:User

標籤:知識庫   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整合

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.