服務器端: 華為彈性雲服務器 服務系統:WindowsServer 2012 64bit Rserve默認端口:6311
(華為雲服務器需要在網絡安全組設置入方向規則並指定端口)
java項目所用jar包 REngine.jar RserveEngine.jar Rserve.jar
一、下載安裝R
https://www.r-project.org/
二、設置系統環境變量
1、 下載安裝以后,設置R相關的環境變量,本機安裝(D:\R\R-3.3.2)
R_HOME 值為:D:\R\R-3.3.2
path 末尾添加 D:\R\R-3.3.2\bin;
配置完成后運行CMD 輸入 R 出現如下則R環境配置成功
三、安裝並載入Rserve
在R中運行
>install.packages("Rserve") >library(Rserve)
四、啟動Rserve服務
將Rserve安裝目錄D:\R\R-3.3.2\library\Rserve\libs\x64下三個文件拷到D:\R\R-3.3.2\library\Rserve\libs\x64下
方法1、在R中啟動Rserve 直接使用Rserve()函數。
>library(Rserve) >Rserve() Starting Rserve.. "D:\R\R-3.3.2\library\Rserve\libs\x64\Rserve.exe"
方法2、在“D:\R\R-3.3.2\library\Rserve\libs\x64”目錄下運行CMD 輸入命令 R CMD Rserve --help 出現下圖說明Rserve可以啟動
輸入R CMD Rserve 成功啟動
需要遠程連接需要輸入 R CMD Rserve --RS-enable-remote
五、Rserve的遠程配置
查看Rserve配置
CMD下輸入 R CMD Rserve --RS-settings 出現如下圖
config file: Rserv.cfg 配置文件名稱 working root: R運行時工作目錄 /tmp/Rserv port: 6311 通信端口 local socket: TCP/IP TCP/IP協議 authorization: 認證未開啟 plain text password: 不允許明文密碼 passwords file: 密碼文件,未指定 allow I/O: 允許IO操作 allow remote access: 遠程訪問未開啟 control commands: 命令控制未開啟 interactive: 允許通信 max.input buffer size: 文件上傳限制262mb
新建txt文本 內容如下
workdir /tmp/Rserv remote enable fileio enable interactive yes port 6311 maxinbuf 262144 encoding utf8 control enable source start.R plaintext enable
另存為名稱為Rserv后綴名為.cfg的Rserv Rserv.cfg
上述信息包含了一個start.R腳本。新建R腳本輸入
cat("This is my Rserve!!") print(paste("Server start at",Sys.time()))
保存並將文件放到該目錄下(此腳本用於提示Rserve啟動成功)
建立java工程 導入三個jar包添加到構建路徑
DEMO:
package com.shengtian.test; import org.rosuda.REngine.REXPMismatchException; import org.rosuda.REngine.Rserve.RConnection; import org.rosuda.REngine.Rserve.RserveException; public class TestRserve { public static void main(String[] args) { try { TestRserve tr = new TestRserve(); tr.callRserve(); } catch(Exception e) { e.printStackTrace(); } } public void callRserve() throws RserveException,REXPMismatchException { RConnection rcon = new RConnection("114.115.205.210"); //建立遠程鏈接 String rv = rcon.eval("R.version.string").asString(); //得到R版本信息 double[] arr = rcon.eval("rnorm(10)").asDoubles(); //通過R得到10個隨機數返回數組 System.out.println(rv); //輸出版本信息 for(double x:arr) //遍歷集合 { System.out.println(x); } } }
運行結果: