在Java中使用Rserve調用R

昨天跟老師一塊兒討論以後獲得了新的任務,討論沒獲得什麼結果,又收到了新的學習任務——在Java中調用R使用Rserve。 java

先介紹一下R 編程

R是一個用於統計計算和統計製圖的優秀工具。其功能包括:數據存儲和處理系統;數組運算工具(其向量、矩陣運算方面功能尤爲強大);完整連貫的統計分析工具;優秀的統計製圖功能;簡便而強大的編程語言:可操縱數據的輸入和輸入,可實現分支、循環,用戶可自定義功能 。
而Java語言是目前最流行的語言,因此今天嘗試經過java來調用R函數爲下面經過調用數學函數實現業務功能作基礎。
目前我在32位windows7上作測試。
1. 首先須要下載R的windows安裝程序,地址爲http://cran.r-project.org/而後安裝就能夠了。
2. 安裝Rserve,能夠經過R界面中的命令行輸入:install.packages("Rserve")或者在R界面上選擇:程序包->安裝程序包,而後找到Rserve進行安裝。 windows

選擇China(Hefei)服務器速度較快,China(BeiJing1)沒有速度,安裝完成以後就ok啦! 數組

3. 啓動Rserve, R界面中的命令行中輸入:library(Rserve)來加載Rserve,而後輸入Rserve()進行啓動服務。
到此Rserve已經配置並啓動好,下面輪到Java程序調用了。
1. 下載Rserve提供的jar包,打開http://www.rforge.net/Rserve/files/,下載REngine.jarRserveEngine.jar,而後放到本身的項目中,並引入。
2. 編輯代碼以下: 服務器

[java]  view plain copy
  1. import org.rosuda.REngine.REXPMismatchException;  
  2. import org.rosuda.REngine.REngineException;  
  3. import org.rosuda.REngine.Rserve.*;  
  4. import org.rosuda.REngine.Rserve.RserveException;  
  5. import org.slf4j.Logger;  
  6. import org.slf4j.LoggerFactory;  
  7.   
  8. import rserver.function.RService;  
  9.   
  10. public class CallR {  
  11.     private RService rService;  
  12.     private static final Logger logger = LoggerFactory.getLogger(CallR.class);  
  13.     public CallR() throws REXPMismatchException, REngineException  
  14.     {   
  15.         rService = new RService();  
  16.         RConnection re = rService.startTransaction(); //開始獨佔工做空間  
  17.         double[] xx = {1,2,3,4,5,6,7,8,9,10}; //生成兩個數組  
  18.         double[] yy = {1,2,3,4,5,6,7,8,9,10};  
  19.         try {  
  20.         re.assign("x", xx); //給R的變量賦值  
  21.         re.assign("y", yy);  
  22.         System.out.println("jpeg('D:\\\\test.jpg')");  
  23.         re.eval("jpeg('D:\\\\test.jpg')");  
  24.         re.eval("qqplot(x, y)");//繪圖  
  25.         re.eval("dev.off()");  
  26.     
  27.         } catch (RserveException e) {  
  28.             logger.warn("Failed to create temp file", e);  
  29.         } finally {  
  30.        this.rService.endTransaction(); //退出時必定要關閉此工做空間  
  31.     }  
  32.     }  
  33.      public static void main(String args[]) throws REXPMismatchException, REngineException  
  34.        {  new CallR();  }  
  35. }  

代碼運行以後在D盤下就會生成一個jpg圖片以下圖所示,至此java鏈接R 的測試告一段落,這也是在爲之後的項目中的模型分析作鋪墊。 編程語言

相關文章
相關標籤/搜索