昨天跟老師一塊兒討論以後獲得了新的任務,討論沒獲得什麼結果,又收到了新的學習任務——在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.jar和RserveEngine.jar,而後放到本身的項目中,並引入。
2. 編輯代碼以下: 服務器
- import org.rosuda.REngine.REXPMismatchException;
- import org.rosuda.REngine.REngineException;
- import org.rosuda.REngine.Rserve.*;
- import org.rosuda.REngine.Rserve.RserveException;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
-
- import rserver.function.RService;
-
- public class CallR {
- private RService rService;
- private static final Logger logger = LoggerFactory.getLogger(CallR.class);
- public CallR() throws REXPMismatchException, REngineException
- {
- rService = new RService();
- RConnection re = rService.startTransaction(); //開始獨佔工做空間
- double[] xx = {1,2,3,4,5,6,7,8,9,10}; //生成兩個數組
- double[] yy = {1,2,3,4,5,6,7,8,9,10};
- try {
- re.assign("x", xx); //給R的變量賦值
- re.assign("y", yy);
- System.out.println("jpeg('D:\\\\test.jpg')");
- re.eval("jpeg('D:\\\\test.jpg')");
- re.eval("qqplot(x, y)");//繪圖
- re.eval("dev.off()");
-
- } catch (RserveException e) {
- logger.warn("Failed to create temp file", e);
- } finally {
- this.rService.endTransaction(); //退出時必定要關閉此工做空間
- }
- }
- public static void main(String args[]) throws REXPMismatchException, REngineException
- { new CallR(); }
- }
代碼運行以後在D盤下就會生成一個jpg圖片以下圖所示,至此java鏈接R 的測試告一段落,這也是在爲之後的項目中的模型分析作鋪墊。 編程語言