java的rserve实现_Java 使用 Rserve 实现与 R 的通信

本文介绍了如何在Java中使用Rserve与R语言进行通信。首先讲解了Rserve的安装和启动方法,包括在R环境中启动和命令行启动,并提到了启用远程连接的参数。接着展示了在IntelliJ IDEA中创建Maven项目,添加Rserve Java客户端依赖,以及编写Java代码调用Rserve,执行R命令如获取R版本、生成随机数和执行R源文件中的自定义函数。最后,给出了代码执行的示例输出。
摘要由CSDN通过智能技术生成

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

参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值