1. 程式人生 > >Java 與 R 互動--Java呼叫R函式-Rserver方式

Java 與 R 互動--Java呼叫R函式-Rserver方式

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)
}