国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

Java程序怎么通過(guò)Rserve遠程調用R

發(fā)布時(shí)間:2021-08-23 15:02 來(lái)源:億速云 閱讀:0 作者:chen 欄目: 服務(wù)器 歡迎投稿:712375056

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

Rserve介紹

        Rserve是一個(gè)基于TCP/IP協(xié)議的,允許R語(yǔ)言與其他語(yǔ)言通信的C/S結構的程序,支持C/C++,Java,PHP,Python,Ruby,Nodejs等。 Rserve提供遠程連接,認證,文件傳輸等功能。我們可以設計R做為后臺服務(wù),處理統計建模,數據分析,繪圖等的任務(wù)。

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


Rserve安裝

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

Linux系統下建議使用root權限安裝。下面的內容是依據Windows7系統中安裝過(guò)程進(jìn)行描述的。

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

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

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

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

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

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


啟動(dòng)Rserve服務(wù)

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

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

R將作出如下應答:

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

注意:如果執行R CMD Rserve命令報錯,說(shuō)明R不認識此命令,需要配置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遠程連接Rserve

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

  • ? REngine.jar

  • ? RserveEngine.jar

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

簡(jiǎn)單的測試代碼:

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"); //直接寫(xiě)IP如果報錯,說(shuō)明沒(méi)有使用 R CMD Rserve --RS-enable-remote 的方式啟動(dòng)

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

        }  

    }  

}  

測試可以通過(guò),程序將輸出R語(yǔ)言版本信息及10個(gè)Double類(lèi)型的數字。

Java遠程執行R腳本

上面的示例只是執行R命令,但如果我們在上放置R腳本又該如何執行該腳本或調用其中的函數呢?

有兩種方法可以完成上面的問(wèn)題。

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

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

     

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

第一種方法就是直接用source函數將area.R腳本加載上來(lái),然后就可以像調用R語(yǔ)言?xún)戎妹?函數一樣調用腳本中的area方法了。這樣做有一個(gè)缺點(diǎn)就是每建立一次Java與R之間的連接就需要調用source函數一次。
示例代碼:

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");//直接寫(xiě)IP如果報錯,說(shuō)明沒(méi)有使用 R CMD Rserve --RS-enable-remote 的方式啟動(dòng)

        // source函數需要給出R腳本路徑, 注意傳入轉義的引號  

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

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

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

    }  

}  

代碼測試通過(guò)。

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。

男受被做哭激烈娇喘GV视频| 亚洲最大的成人网| 欧美肥妇BWBWBWBXX| 特黄 做受又硬又粗又大视频| 亚洲AV中文无码乱人伦在线播放| 国产V在线最新观看视频|