java的rserve實現_Java 使用 Rserve 實現與 R 的通信

Rserve 是一個基于 TCP/IP 的服務器程序,它允許其他語言調用 R 語言。由于 Rserve 采用 C/S (客戶端/服務器)的調用方式,因此客戶端并不需要鏈接 R 語言庫,客戶端程序與 R 程序可以實現低耦合的目的。

為調用 R 語言,需要實現一個與 Rserve 通信的客戶端程序,幸運的是目前常用的語言包括 C/C++,PHP,Java 等都實現提供與 Rserve 通信的客戶端程序。

本文講述 Java 語言如何利用 Rserve 實現與 R 語言的通信。

安裝 Rserve

假設 R 的運行環境是 CentOS(CentOS 使用yum install R來安裝 R),在 CentOS 我們已經安裝好 R。

在 Linux 命令行中輸入

R

進入 R 的交互環境,然后輸入

> install.packages("Rserve")

接下來就可以安裝 Rserve。

啟動 Rserve

啟動 Rserve 有兩種方式,一種是在 R 程序中啟動,另一種是在命令行中啟動。

1. R 程序啟動 Rserve

打開 R 的交互環境,輸入以下命令:

library(Rserve)

Rserve()

執行后,Rserve 便啟動起來。

2. 命令行啟動 Rserve

也可以直接在命令行中輸入:

R CMD Rserve

啟動 Rserve。

為讓 Rserve 支持遠程連接,可以加入--RS-enable-remote參數:

R CMD Rserve --RS-enable-remote

Java 調用 R

使用 IntelliJ IDEA 創建一個 Maven quickstart 項目,然后在 pom.xml 中添加 Java 版本的 Rserve 客戶端的依賴:

org.rosuda.REngine

Rserve

1.8.1

然后編寫調用 R 的代碼。

import org.rosuda.REngine.REXP;

import org.rosuda.REngine.Rserve.RConnection;

import org.rosuda.REngine.Rserve.RserveException;

import org.rosuda.REngine.REXPMismatchException;

public class RserveDemo {

public static void main ( String[] args ) throws RserveException, REXPMismatchException

{

RserveDemo rserveDemo = new RserveDemo();

rserveDemo.callRserve();

}

private void callRserve() throws RserveException, REXPMismatchException {

// 連接 Rserve

RConnection c = new RConnection("120.78.80.23");

// 輸出 R 的版本

REXP x = c.eval("R.version.string");

System.out.println(x.asString());

// 獲取10個隨機數字

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

for (double a : arr) {

System.out.print(a + ",");

}

System.out.println();

// 調用 R 源文件

c.eval("source('/home/R/add.R')");

int sum = c.eval("myAdd(1, 2)").asInteger();

System.out.println(sum);

}

}

在上述代碼中,我們首先創建了與 Rserve 的連接。由于 Java 代碼與 Rserve 不在同一臺機器,所以我們指定了 Rserve 的機器 IP 地址。

接下來,我們調用了 R 語言的一些方法,包括輸出 R 語言的版本,獲取10個隨機數字。

最后,我們演示了如何調用 R 語言源代碼。在 Linux 平臺我們先創建一個 add.R 的文件,然后編寫 R 代碼:

myAdd

sum

return (sum)

}

add.R 源代碼放置在目錄 /home/R 下。R 語言中使用source('/home/R/add.R')可以執行源代碼,在 Java 代碼中,我們先執行 add.R 源代碼,接下來調用了myAdd()函數。

執行以上代碼,輸出:

R version 3.5.0 (2018-04-23)

-2.533623370009491,0.7961512738732901,0.7122860585280386,-0.16063583146722446,-0.598315148752494,0.09854836382399271,-1.0914493041810422,-1.5425930835313806,0.584390936738569,0.35687345246533786,

3

參考資料

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/271834.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/271834.shtml
英文地址,請注明出處:http://en.pswp.cn/news/271834.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

對其他組所提建議的回復(第一階段)

序號題目組名 1理財貓非常3加11.圖片的瀏覽功能我們會在第二階段完成2跑什么操running man1.我們會盡快將界面和功能整合 2.物品的分類會在后期進行中逐步完善3水騎士水騎士團隊暫無4鐵大云盤老司機1.我們的項目是可以顯示“注冊成功”的,你的建議... 2.買家賣家的聊…

數據庫文檔生成工具V1.0

??作者主頁:IT技術分享社區 ??作者簡介:大家好,我是IT技術分享社區的博主,從事C#、Java開發九年,對數據庫、C#、Java、前端、運維、電腦技巧等經驗豐富。 ??個人榮譽: 數據庫領域優質創作者🏆&#x…

volatile關鍵字和AtomicInteger

在Java中,線程部分是一個重點,本篇文章說的JUC也是關于線程的。JUC就是java.util .concurrent工具包的簡稱。這是一個處理線程的工具包,JDK 1.5開始出現的。下面一起來看看它怎么使用。 一、volatile關鍵字與內存可見性 1、內存可見性&…

前端:JS幾種常見的排序

??作者主頁:IT技術分享社區 ??作者簡介:大家好,我是IT技術分享社區的博主,從事C#、Java開發九年,對數據庫、C#、Java、前端、運維、電腦技巧等經驗豐富。 ??個人榮譽: 數據庫領域優質創作者🏆&#x…

bzoj3747 [POI2015]Kinoman

線段樹&#xff0c;記錄next[i]下一部與當前電影一樣的位置&#xff0c;然后枚舉區間左端點i&#xff0c;詢問線段樹最大值后刪除i到next[i-1]這段區間的觀影值&#xff0c;且增加next[i]到next[next[i]]-1這段區間的觀影值。 代碼&#xff0c;跑的有點慢 1 #include<cstdio…

java_poi教程.pdf,如何使用POI轉換.DOC / .DOCX為PDF在Java ..?

how to convert ms-document to PDF, is there any example pls sharewith me.. thanks.解決方案If you are requiered to use POI i guess you should take a look at org.apache.poi.hwpf.converterI never tried this, but i guess its worth a try atleast.It seems like y…

在線語音轉文字工具V1.0

在線語音轉文字工具V1.0介紹在線語音轉文字工具V1.0&#xff0c;采用C#開發語音基于Framework4.5開發&#xff0c;主要采用百度語音識別SDK&#xff0c;實現了在線文本轉語音的功能&#xff0c;可以轉換后直接播放。有需要的朋友可以下載學習一下。如果遇到問題的可以留言或者私…

超媒體

“超媒體”是超級媒體的縮寫。超媒體是一種采用非線性網狀結構對塊狀多媒體信息&#xff08;包括文本、圖像、視頻等&#xff09;進行組織和管理的技術。 超媒體在本質上和超文本是一樣的&#xff0c;只不過超文本技術在誕生的初期管理的對象是純文本&#xff0c;所以叫做超文本…

java局部刷新session過期_Ajax局部頁面刷新和History API結合的陷阱

ajax在現代網站已經得到非常普遍地應用&#xff0c;主要的好處大家都知道(異步加載數據&#xff0c;不用刷新整個瀏覽器&#xff0c;更小的數據傳輸尺寸)。對于那些老網站或者老項目來說全盤改造成ajax并不現實&#xff0c;于是就有了“局部頁面刷新”這個解決方案。如果不知道…

Java通過Netty,實現Websocket消息推送只需要簡單幾步

前言 曾幾何時&#xff0c;不知道大家有沒有在項目里遇到過需要服務端給客戶端推送消息的需求&#xff0c;是否曾經苦惱過、糾結過&#xff0c;我們知道要想實現這樣的需求肯定離不開websocket長連接方式&#xff0c;那么到底是該選原生的websocket還是更加高級的netty框架呢&a…

53.Maximum Subarray

/** 53.Maximum Subarray * 2016-5-7 by Mingyang * 如果我們從頭遍歷這個數組。對于數組中的其中一個元素&#xff0c;它只有兩個選擇&#xff1a; 1.* 要么加入之前的數組加和之中&#xff08;跟別人一組&#xff09; * 2. 要么自己單立一個數組&#xff08;自己單開一組&…

java 創建者設計模式_Java設計模式之創建者模式分享熱愛編程,程序人生

PS:今天的23中設計模式中的創建者方式&#xff0c;至此告一段落。我今天帶來的技術分享為創建者模式以及原型模式。當然在Java中這兩種方式很常見&#xff0c;只不過我們寫的次數確實有點低而已&#xff0c;但是這不是我不學它的借口&#xff01;&#xff01;&#xff01;創建者…

一文讀懂電感器的原理、結構、作用及分類

電感器是能夠把電能轉化為磁能而存儲起來的元件。電感器的結構類似于變壓器&#xff0c;但只有一個繞組。電感器具有一定的電感&#xff0c;它只阻礙電流的變化。 如果電感器在沒有電流通過的狀態下&#xff0c;電路接通時它將試圖阻礙電流流過它&#xff1b;如果電感器在有電流…

final關鍵字與static對比

final關鍵字與static對比 static關鍵字修飾變量時&#xff0c;會使該變量在類加載時就會被初始化&#xff0c;不會因為對象的創建再次被加載&#xff0c;當變量被static 修飾時就代表該變量只會被初始化一次 例如圖中所示&#xff0c;被static修飾的變量j&#xff0c;雖然創建…

juce中的BailOutChecker

界面庫中值得注意的一點就是對象響應事件的時候自身被刪除了&#xff0c;那么后續的訪問自然就會出問題&#xff0c;所以需要在響應事件之后先添加引用&#xff0c;相關處理之后再查看自身是否已經被刪除&#xff0c;如果已經被刪除那么就直接退出。juce中通過BailOutChecker來…

java quartz 跳過_Java Quartz計劃作業-禁止同時執行作業

我正在使用Quartz Job執行特定任務。我也在我的Main應用程序類中安排它的執行&#xff0c;而我試圖完成的工作是不允許同時執行此作業的實例。因此&#xff0c;調度程序僅應在其先前實例完成后才執行作業。這是我的工作班級&#xff1a;public class MainJob implements Job {s…

mac USB串口工具配置

安裝USB serial 驅動 我的usb serial芯片是 pl2303, 先到官網上下載對應驅動&#xff0c;并安裝。安裝完成之后會要求重啟。 http://www.prolific.com.tw/admin/Technology/GetFile.ashx?fileID238 安裝 minicom https://alioth.debian.org/projects/minicom/ 下載源碼&…

macpro生成公鑰并查看公鑰

打開macpro的終端輸入以下命令&#xff1a; $ cd ~/.ssh $ ls 此時發現沒有那個id_rsa.pub文件&#xff0c;沒有&#xff0c;就需要創建公鑰 用ssh-keygen創建公鑰 此時已經有了