Java程序怎么通过Rserve远程调用R

介绍

本篇内容介绍了“Java程序怎么通过Rserve远程调用R”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

<强> Rserve介绍

,,,,,Rserve是一个基于TCP/IP协议的,允许R语言与其他语言通信的C/S结构的程序,支持C/c++、Java、PHP、Python、Ruby、Nodejs等。Rserve提供远程连接,认证,文件传输等功能。我们可以设计R做为后台服务,处理统计建模、数据分析,绘图等的任务。

,,,,,详细介绍请参照官方网站:https://rforge.net/Rserve/


<强> Rserve安装

<强>注意:安装Rserve前需要安装R,我安装的是,R-3.1.2-win.exe

Linux系统下建议使用根权限安装。下面的内容是依据Windows7多系统中安装过程进行描述的。

进入R语言解释器:R

安装命令:install.packages (“Rserve")

然后安装程序会提示我们选择下载镜像,提示如下:

- - - - - -请选择一个凹口镜在这个会话中使用- - - - - -

等我们选择了镜像后(测试时选择的是中国(xxx)),安装程序便进行下载安装,最终会输出如下的信息(Linux下的输出信息或有不同):

癑ava程序怎么通过Rserve远程调用R

说明Rserve安装成功,安装路径为:% R_HOME %/图书馆/Rserve目录。


<>强启动Rserve服务

在Windows命令窗口进入R_HOME/图书馆/Rserve/libs/i386目录中执行如下命令(我的Windows7多是32位的,如果是64位系统对应目录为R_HOME/图书馆/Rserve/libs/x64)一定要在dos窗口下进入该目录,不然以下命令不识别:

<李>

R CMD Rserve,注意:如果允许IP远程连接要使用,R CMD Rserve——RS-enable-remote

R将作出如下应答:

癑ava程序怎么通过Rserve远程调用R

说明Rserve启动成功(端口6311),可以进行连接测试了。

<强>注意:如果执行R CMD Rserve命令报错,说明R不认识此命令,需要配置R的环境变量,具体如下:

<强> R_HOME,R的安装目录(我的安装目录为:C:\Program Files\R\ R-2.15.2)

<>强路径中添加

<强> C: \ Program Files \ R \ R-2.15.2 \ bin;

<强> C: \ Program Files \ R \ R-2.15.2 \ bin \ x64


<强> Java远程连接Rserve

下载依赖jar包,地址:http://www.rforge.net/Rserve/files/
共两个jar包,下载完成后将它们加入到项目的类路径中即可:

<李>

?李REngine.jar

<李>

?RserveEngine。李jar

也可以到Rserve安装目录中寻找,比如:R_HOME/图书馆/Rserve/java目录中就有相关jar包,名字略有不同,经测试可以使用:

癹ava程序怎么通过Rserve远程调用R

简单的测试代码:

包com.zyh.up.general.rjava;,

进口org.rosuda.REngine.REXPMismatchException;,

进口org.rosuda.REngine.Rserve.RConnection;,

进口org.rosuda.REngine.Rserve.RserveException;,

公共类RserveBegin {,

,,公共静态void main (String [] args) {,

,,,,尝试{,

,,,,,,callRserve ();,

,,,,}捕捉(RserveException e) {,

,,,,,,e.printStackTrace ();,

,,,,}捕捉(REXPMismatchException e) {,

,,,,,,e.printStackTrace ();,

,,,,},

,,},

,,静态孔隙callRserve()抛出RserveException REXPMismatchException {,

,,,,RConnection RConnection=new RConnection (“192.168.101.122");//直接写IP如果报错,说明没有使用,R CMD Rserve——RS-enable-remote的方式启动

,,,,字符串房车=rConnection.eval (“R.version.string") .asString ();,

,,,,System.out.println (rv);,

,,,,双[]arr=rConnection.eval (“rnorm (10)“) .asDoubles ();,

,,,,(双d: arr) {,

,,,,,,System.out.println (d);,

,,,,},

,,},

},

测试可以通过,程序将输出R语言版本信息及10个双类型的数字。

<强> Java远程执行R脚本

上面的示例只是执行R命令,但如果我们在服务器上放置R脚本又该如何执行该脚本或调用其中的函数呢?

有两种方法可以完成上面的问题。

假如我们定义了一个R脚本区域。R,其中定义了一个方法,该方法接收一个半径值然后计算对应面积并返回,脚本内容非常简单:

<李>

area<函数(R){π* R ^ 2},

Java程序怎么通过Rserve远程调用R