Java调用R函数 : Rserve方式

R内置多种统计学及数字分析功能。R的功能也可以通过安装包(Packages,用户撰写的功能)增强。因为S的血缘,R比其他统计学或数学专用的编程语言有更强的面向对象(面向对象程序设计)功能。显然R是统计计算的强大工具,而Java是做应用系统的主流语言,两者天然具有整合的需要。关于整合,一方面,R中可以创建Java对象调用Java方法,另一方面,Java中可以转换R的数据类型调用R的函数,互相取长补短。

此文主要介绍如何使用Java调用R函数。

Java调用R函数常见的有两种方式:JRI 和 Rserve

JRI的全称是Java/R Interface,通过调用R的动态链接库从而利用R中的函数等。此种方式需要修改系统的环境变量,我不喜欢这种方式,此处不做介绍,读者可自行研究。可在 这里 下载 JRI.jar、REngine.jar 和 JRIEngine.jar 这三个库文件。

下面主要介绍 Rserve 方式

这是一个基于TCP/IP的服务器,通过二进制协议传输数据,可以提供远程连接,使得客户端语言能够调用R。目前Rserve作为一个package发布在CRAN上,可以直接使用install.packages(“Rserve”)进行安装。需要使用时在R控制台下加载该包,然后输入命令Rserve(),开启服务器,就可以供客户端调用。

其客户端可以有多种,这里只介绍JAVA客户端。最早的客户端包是JRclient,使用REngine作客户端(和JRI一致),在 此处 可以下载到 REngine.jar 和 RserveEngine.jar 两个文件。

首先建立一个新的连接,然后就可以使用eval之类的方法将R中的表达式传到服务器端,通过R求值后传回JAVA中REXP类型的变量,然后打印出来,整个过程非常简单。由于不需要对R进行初始化,因此速度会比较快。在其他系统下可以同时建立多个连接,但是在Windows下只允许同时打开一个连接,后续的连接都会共有相同的命名空间。官网上不建议在Windows下使用Rserve,因为会丧失很多性能,他们推荐可以考虑DCOM的方式。不过DCOM那个工程没有现成的jar包可用,其实如果是拿R做分析系统中的运算引擎,单连接够用了。

在R控制台下载“Rserve”包,并安装

R包管理参见 R-包管理 : 查看、卸除、安装与卸载

加载

可以看到Rserve已成功启动

建立Java工程,导入 REngine.jar 和 RserveEngine.jar

下载 REngine.jar | RserveEngine.jar (下载104) 解压可得到 REngine.jar 和 RserveEngine.jar

你也可以在 此处 下载

导入包后,编写测试用例

如果调用成功,将会在控制台看到R的版本信息。

如果出现 Connection refused: connect 错误,可能是由于“Rserve” 服务器没有启动起来的原因,试试在R内运行如下语句

Java调用R函数 : Rserve方式》有1个想法

  1. Opera 12.17 Opera 12.17 Windows 8 x64 Edition Windows 8 x64 Edition

    Unquestionably believe that which you said. Your favorite reason seemed
    to be on the internet the easiest thing to be aware of. I say to you, I definitely get annoyed while people think about worries that they just do not know about.
    You managed to hit the nail upon the top and defined out the whole thing without having side-effects
    , people can take a signal. Will probably be back to get more.
    Thanks

发表评论

电子邮件地址不会被公开。 必填项已用*标注