Java 與 R 互動--Java呼叫R函式-Rserver方式
阿新 • • 發佈:2019-01-05
JAVA很適合開發應用系統,但是數學建模和計算能力非其所長,如果該系統需要進行大量的統計或者優化的計算,呼叫R是一種很好的方式。JAVA負責系統的構建,R用來做運算引擎,從而實現應用型和分析性相結合的系統。
首先要介紹的是Rserve的方式,這是一個基於TCP/IP的伺服器,通過二進位制協議傳輸資料,可以提供遠端連線,使得客戶端語言能夠呼叫R。目前Rserve作為一個package釋出在CRAN上,可以直接使用install.packages(“Rserve”)進行安裝。需要使用時在R控制檯下載入該包,然後輸入命令Rserve(),開啟伺服器,就可以供客戶端呼叫。
參考:http://blog.csdn.net/likelet/article/details/7826054
R/Rstudio操作
# Java 與 R 互動--Java呼叫R函式
#載入Rserver包,先啟動
#install.packages('Rserve')
library(Rserve)
Rserve()
Java/Eclipse 操作
//在Eclipse中載入jar包,進行測試,程式碼如下:
//建立連線
RConnection rConnection = new RConnection();
REXP rexp = rConnection.eval("R.version.string");//測試連線,方法是eval(String arg0)
System.out.println (rexp.asString());// R version 3.1.2 (2014-10-31)
// Java程式碼 呼叫 測試R函式
String vector = "c(1,3,5,7,9)";
REXP meanR = rConnection.eval("meanVal<-mean(" + vector + ")");
System.out.println("meanR = " + meanR.asDouble());// 5.0
double mean = rConnection.eval("meanVal").asDouble();
System.out.println("mean = " + mean);
//Console輸出結果:
R version 3.1.2 (2014-10-31)
meanR = 5.0
mean = 5.0
呼叫R自定義函式
//載入原始檔
rConnection.eval("source('D:/11_Java_R.R')");//檔名不能帶中文,否則報錯:eval failed, request status: error code: 127
int a = 2;
int b = 3;
int c = 4;
int sum = rConnection.eval("getSum(" + a + "," + b + "," + c + ")").asInteger();
System.out.println("the sum = " + sum);
//Console輸出:
the sum = 3
#附錄R檔案中的自定義函式
#自定義求和函式
getSum<-function(x,y,z){
m = 2*x + y - z
return(m)
}