java的rserve实现_Java 使用 Rserve 实现与 R 的通信
Rserve 是一個(gè)基于 TCP/IP 的服務(wù)器程序,它允許其他語(yǔ)言調(diào)用 R 語(yǔ)言。由于 Rserve 采用 C/S (客戶(hù)端/服務(wù)器)的調(diào)用方式,因此客戶(hù)端并不需要鏈接 R 語(yǔ)言庫(kù),客戶(hù)端程序與 R 程序可以實(shí)現(xiàn)低耦合的目的。
為調(diào)用 R 語(yǔ)言,需要實(shí)現(xiàn)一個(gè)與 Rserve 通信的客戶(hù)端程序,幸運(yùn)的是目前常用的語(yǔ)言包括 C/C++,PHP,Java 等都實(shí)現(xiàn)提供與 Rserve 通信的客戶(hù)端程序。
本文講述 Java 語(yǔ)言如何利用 Rserve 實(shí)現(xiàn)與 R 語(yǔ)言的通信。
安裝 Rserve
假設(shè) R 的運(yùn)行環(huán)境是 CentOS(CentOS 使用yum install R來(lái)安裝 R),在 CentOS 我們已經(jīng)安裝好 R。
在 Linux 命令行中輸入
R
進(jìn)入 R 的交互環(huán)境,然后輸入
> install.packages("Rserve")
接下來(lái)就可以安裝 Rserve。
啟動(dòng) Rserve
啟動(dòng) Rserve 有兩種方式,一種是在 R 程序中啟動(dòng),另一種是在命令行中啟動(dòng)。
1. R 程序啟動(dòng) Rserve
打開(kāi) R 的交互環(huán)境,輸入以下命令:
library(Rserve)
Rserve()
執(zhí)行后,Rserve 便啟動(dòng)起來(lái)。
2. 命令行啟動(dòng) Rserve
也可以直接在命令行中輸入:
R CMD Rserve
啟動(dòng) Rserve。
為讓 Rserve 支持遠(yuǎn)程連接,可以加入--RS-enable-remote參數(shù):
R CMD Rserve --RS-enable-remote
Java 調(diào)用 R
使用 IntelliJ IDEA 創(chuàng)建一個(gè) Maven quickstart 項(xiàng)目,然后在 pom.xml 中添加 Java 版本的 Rserve 客戶(hù)端的依賴(lài):
org.rosuda.REngine
Rserve
1.8.1
然后編寫(xiě)調(diào)用 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個(gè)隨機(jī)數(shù)字
double[] arr = c.eval("rnorm(10)").asDoubles();
for (double a : arr) {
System.out.print(a + ",");
}
System.out.println();
// 調(diào)用 R 源文件
c.eval("source('/home/R/add.R')");
int sum = c.eval("myAdd(1, 2)").asInteger();
System.out.println(sum);
}
}
在上述代碼中,我們首先創(chuàng)建了與 Rserve 的連接。由于 Java 代碼與 Rserve 不在同一臺(tái)機(jī)器,所以我們指定了 Rserve 的機(jī)器 IP 地址。
接下來(lái),我們調(diào)用了 R 語(yǔ)言的一些方法,包括輸出 R 語(yǔ)言的版本,獲取10個(gè)隨機(jī)數(shù)字。
最后,我們演示了如何調(diào)用 R 語(yǔ)言源代碼。在 Linux 平臺(tái)我們先創(chuàng)建一個(gè) add.R 的文件,然后編寫(xiě) R 代碼:
myAdd
sum
return (sum)
}
add.R 源代碼放置在目錄 /home/R 下。R 語(yǔ)言中使用source('/home/R/add.R')可以執(zhí)行源代碼,在 Java 代碼中,我們先執(zhí)行 add.R 源代碼,接下來(lái)調(diào)用了myAdd()函數(shù)。
執(zhí)行以上代碼,輸出:
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
參考資料
總結(jié)
以上是生活随笔為你收集整理的java的rserve实现_Java 使用 Rserve 实现与 R 的通信的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: linux进程和计划任务,linux进程
- 下一篇: java_poi教程.pdf,如何使用P