Java程序怎么通過Rserve遠(yuǎn)程調(diào)用R

本篇內(nèi)容介紹了“Java程序怎么通過Rserve遠(yuǎn)程調(diào)用R”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

成都創(chuàng)新互聯(lián)公司專注于成都網(wǎng)站設(shè)計、網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計、網(wǎng)站制作、網(wǎng)站開發(fā)。公司秉持“客戶至上,用心服務(wù)”的宗旨,從客戶的利益和觀點(diǎn)出發(fā),讓客戶在網(wǎng)絡(luò)營銷中找到自己的駐足之地。尊重和關(guān)懷每一位客戶,用嚴(yán)謹(jǐn)?shù)膽B(tài)度對待客戶,用專業(yè)的服務(wù)創(chuàng)造價值,成為客戶值得信賴的朋友,為客戶解除后顧之憂。

Rserve介紹

        Rserve是一個基于TCP/IP協(xié)議的,允許R語言與其他語言通信的C/S結(jié)構(gòu)的程序,支持C/C++,Java,PHP,Python,Ruby,Nodejs等。 Rserve提供遠(yuǎn)程連接,認(rèn)證,文件傳輸?shù)裙δ堋N覀兛梢栽O(shè)計R做為后臺服務(wù),處理統(tǒng)計建模,數(shù)據(jù)分析,繪圖等的任務(wù)。

        詳細(xì)介紹請參照官方網(wǎng)站:https://rforge.net/Rserve/


Rserve安裝

注意:安裝Rserve前需要安裝R,我安裝的是 R-3.1.2-win.exe

Linux系統(tǒng)下建議使用root權(quán)限安裝。下面的內(nèi)容是依據(jù)Windows7系統(tǒng)中安裝過程進(jìn)行描述的。

進(jìn)入R語言解釋器:R

安裝命令:install.packages("Rserve")

然后安裝程序會提示我們選擇下載鏡像,提示如下:

--- Please select a CRAN mirror for use in this session ---

等我們選擇了鏡像后(測試時選擇的是China(xxx)),安裝程序便進(jìn)行下載安裝,最終會輸出如下的信息(Linux下的輸出信息或有不同):

Java程序怎么通過Rserve遠(yuǎn)程調(diào)用R

說明Rserve安裝成功,安裝路徑為:%R_HOME%/library/Rserve目錄。


啟動Rserve服務(wù)

在Windows命令窗口進(jìn)入R_HOME/library/Rserve/libs/i386目錄中執(zhí)行如下命令(我的Windows7是32位的,如果是64位系統(tǒng)對應(yīng)目錄為R_HOME/library/Rserve/libs/x64)一定要在dos窗口下進(jìn)入該目錄,不然以下命令不識別:

  1. R CMD Rserve   注意:如果允許IP遠(yuǎn)程連接要使用 R CMD Rserve --RS-enable-remote

R將作出如下應(yīng)答:

Java程序怎么通過Rserve遠(yuǎn)程調(diào)用R

說明Rserve啟動成功(端口6311),可以進(jìn)行連接測試了。

注意:如果執(zhí)行R CMD Rserve命令報錯,說明R不認(rèn)識此命令,需要配置R的環(huán)境變量,具體如下:

R_HOME   R的安裝目錄(我的安裝目錄為: C:\Program Files\R\R-2.15.2)

path中添加

C:\Program Files\R\R-2.15.2\bin;

C:\Program Files\R\R-2.15.2\bin\x64


Java遠(yuǎn)程連接Rserve

下載依賴jar包,地址:http://www.rforge.net/Rserve/files/
共兩個jar包,下載完成后將它們加入到項(xiàng)目的classpath中即可:

  • ? REngine.jar

  • ? RserveEngine.jar

也可以到Rserve安裝目錄中尋找,比如:R_HOME/library/Rserve/java目錄中就有相關(guān)jar包,名字略有不同,經(jīng)測試可以使用:

Java程序怎么通過Rserve遠(yuǎn)程調(diào)用R

簡單的測試代碼:

package com.zyh.up.general.rjava;  

import org.rosuda.REngine.REXPMismatchException;  

import org.rosuda.REngine.Rserve.RConnection;  

import org.rosuda.REngine.Rserve.RserveException;  

public class RserveBegin {  

    public static void main(String[] args) {  

        try {  

            callRserve();  

        } catch (RserveException e) {  

            e.printStackTrace();  

        } catch (REXPMismatchException e) {  

            e.printStackTrace();  

        }  

    }  

    static void callRserve() throws RserveException, REXPMismatchException {  

        RConnection rConnection = new RConnection("192.168.101.122"); //直接寫IP如果報錯,說明沒有使用 R CMD Rserve --RS-enable-remote 的方式啟動

        String rv = rConnection.eval("R.version.string").asString();  

        System.out.println(rv);  

        double [] arr = rConnection.eval("rnorm(10)").asDoubles();  

        for(double d : arr) {  

            System.out.println(d);  

        }  

    }  

}  

測試可以通過,程序?qū)⑤敵鯮語言版本信息及10個Double類型的數(shù)字。

Java遠(yuǎn)程執(zhí)行R腳本

上面的示例只是執(zhí)行R命令,但如果我們在服務(wù)器上放置R腳本又該如何執(zhí)行該腳本或調(diào)用其中的函數(shù)呢?

有兩種方法可以完成上面的問題。

假如我們定義了一個R腳本area.R,其中定義了一個方法area,該方法接收一個半徑值然后計算對應(yīng)面積并返回,腳本內(nèi)容非常簡單:

  1. area<-function(r){pi*r^2}  

     

下面描述一下如何調(diào)用這個腳本中的area函數(shù),并獲取其返回值。

第一種方法就是直接用source函數(shù)將area.R腳本加載上來,然后就可以像調(diào)用R語言內(nèi)置命令/函數(shù)一樣調(diào)用腳本中的area方法了。這樣做有一個缺點(diǎn)就是每建立一次Java與R之間的連接就需要調(diào)用source函數(shù)一次。
示例代碼:

package com.zyh.up.general.rjava;  

import org.rosuda.REngine.REXP;  

import org.rosuda.REngine.REXPMismatchException;  

import org.rosuda.REngine.Rserve.RConnection;  

import org.rosuda.REngine.Rserve.RserveException;  

public class RserveBegin {  

    public static void main(String[] args) {  

        try {  

            callRScript();  

        } catch (Exception e) {  

            e.printStackTrace();  

        }  

    }  

    static void callRScript() throws RserveException, REXPMismatchException {  

        RConnection rc = new RConnection("192.168.101.122");//直接寫IP如果報錯,說明沒有使用 R CMD Rserve --RS-enable-remote 的方式啟動

        // source函數(shù)需要給出R腳本路徑, 注意傳入轉(zhuǎn)義的引號  

        rc.eval("source("/home/hadoop/wangfeng/javaR/area.R")");  

        REXP rexp = rc.eval("area(10)");  

        System.out.println("Area of 10 is " + rexp.asDouble());  

    }  

}  

代碼測試通過。

“Java程序怎么通過Rserve遠(yuǎn)程調(diào)用R”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

網(wǎng)頁名稱:Java程序怎么通過Rserve遠(yuǎn)程調(diào)用R
網(wǎng)頁地址:http://bm7419.com/article2/psdcoc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT商城網(wǎng)站、靜態(tài)網(wǎng)站品牌網(wǎng)站制作外貿(mào)網(wǎng)站建設(shè)、關(guān)鍵詞優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名