R与JAVA的整合
R是统计计算的强大工具,而JAVA是做应用系统的主流语言,两者天然具有整合的需要。关于整合,一方面,R中可以创建JAVA对象调用JAVA方法,另一方面,JAVA中可以转换R的数据类型调用R的函数,互相取长补短。现在也有一个项目JGR,用JAVA做R的图形界面,可以实现高亮显示自动补全等,还能让JAVA和R互相调用。
关于R中调用JAVA,我想主要是为了利用其面向对象的特性,毕竟R语言近来很致力于向面向对象发展,有个很好的项目rJava可以实现,在www.rforge.net/rJava上。R中调JAVA对我似乎意义不大,本文主要介绍JAVA中调用R。所有测试都在Windows XP、R2.10.1和JDK1.6下完成。
JAVA很适合开发应用系统,但是数学建模和计算能力非其所长,如果该系统需要进行大量的统计或者优化的计算,调用R是一种很好的方式。JAVA负责系统的构建,R用来做运算引擎,从而实现应用型和分析性相结合的系统。
首先要介绍的是Rserve的方式,这是一个基于TCP/IP的服务器,通过二进制协议传输数据,可以提供远程连接,使得客户端语言能够调用R。目前Rserve作为一个package发布在CRAN上,可以直接使用install.packages("Rserve")进行安装。需要使用时在R控制台下加载该包,然后输入命令Rserve(),开启服务器,就可以供客户端调用。
其客户端可以有多种,这里只介绍JAVA客户端。最早的客户端包是JRclient,在www.rosuda.org/Rserve上还可以下载到,但是现在该项目全部移到了www.rforge.net/Rserve,使用REngine作客户端(和JRI一致),在该网站下可以下载到REngine.jar和RserveEngine.jar两个文件。如果用eclipse开发的话,在工程属性中导入这两个外部的jar包,就可以正常使用了。
一个简单的例子:
- public class rtest {
- public static void main(String[] args) throws REXPMismatchException, REngineException {
- RConnection c = new RConnection();
- REXP x = c.eval("R.version.string");
- System.out.println(x.asString());
- }
- }
- <span style="color:#009900"></span>
另一种方式是JRI,全名是Java/R Interface,这是一种完全不同的方式,通过调用R的动态链接库从而利用R中的函数等。目前该项目已经成了rJava的子项目,不再提供单独的JRI的版本。因此使用时简单地通过install.packages("rJava")安装rJava就行,在安装文件夹中,可以看到一个jri的子文件夹,里面有自带的例子可以用来测试。
装好后要修改系统的环境变量,在PATH中添加%R_HOME%bin和%R_HOME%libraryrJavajri,注意R_HOME的路径要正确,重启系统使之生效。使用时同样在eclipse里导入外部的jar包(在www.rforge.net/rJava下载JRI.jar、REngine.jar和JRIEngine.jar这三个文件),在rJava包安装目录下的jriexamples里有现成的例子(rtest.java和rtest2.java),可以测试是否成功。
之前我的电脑上一直存在一个很奇怪的问题,测试第一个例子时在“Creating Rengine (with arguments)”的时候就停住了,第二个例子中一个JAVA框很快闪一下就消失了,控制台中没有任何提示。打开JGR也是一闪即逝。在网上查了很久,只有一个印度哥们也遇到过类似的问题,而且没有找到解决办法。估计应该是实现RMainLoopCallbacks时出了问题,但是找不到原因,后来卸载了R2.9.0重装了R2.10.1,并且通过install.packages安装,终于没问题了,可能是主程序和Package之间的版本冲突,以后记住全部用install.packages来安装package了。
关于客户端服务器的方式和动态链接库的方式,各有所长,按照需要选用。个人经验,不管使用哪种方式,设计时尽量少进行频繁的数据的交互,在逻辑上把系统和计算分开,使得R成为一个纯粹的运算引擎。
---------------------------------------------------------------------------------------------------------------------
例子 二
在试验中,为了求每天价格的波动率,我决定采用ARCH模型,细看了基本原理后,觉得自己去实现挺难的。我的系统是用java写的,遗憾的是找不到java写的ARCH源码,难道,我就真得要自己写了吗?幸运的是,我发现R中有这样的ARCH包,那么,我该如何更好的利用R呢,一个疑问升起,R能不能集成到我的java系统啊?答案是:yes!
R是越来越火了,什么样的算法包都能找到,以前觉得matlab和sas是数据挖掘与分析领域的屠龙宝刀和倚天剑,那么R就是明教的圣火令了,也是一大神器。
在R中有一个rJava的包,相当于,java调用R的接口,有这样的接口,那么java调用R中算法,便如举手之劳了。下面简单介绍下配置过程。
1、下载和安装R软件;
2、在命令窗口,输入:install.packages("rJava"),下载和安装rJava包;
3、配置环境变量;注意这是r软件的安装文件里面的一些文件。这是我的相关配置:D:\R-2.11.1\library\rJava\jri ; D:\R-2.11.1\bin ;
4、引用用jar包到eclipse项目;三个包的名字分别是:JRI.jar\REngine.jar和JRIEngine.jar,在第二步下载的文件当中。
5、就是写程序测试了。
下面是个例子,把代码提出来,供参考:
http://blog.csdn.net/jasontome/article/details/7933612
R与JAVA的整合的更多相关文章
- r与java整合(转)
http://jliblog.com/archives/10 R是统计计算的强大工具,而JAVA是做应用系统的主流语言,两者天然具有整合的需要.关于整合,一方面,R中可以创建JAVA对象调用JAVA方 ...
- java springboot整合zookeeper入门教程(增删改查)
java springboot整合zookeeper增删改查入门教程 zookeeper的安装与集群搭建参考:https://www.cnblogs.com/zwcry/p/10272506.html ...
- 解惑rJava R与Java的快速通道
阅读导读: 1.什么是RJava? 2.怎样安装RJava? 3.怎样用RJava实现R调用Java? 1. rJava介绍 rJava是一个R语言和Java语言的通信接口.通过底层JNI实现调用,同 ...
- mongodb与java的整合
mongodb的相关命令我们这里不在赘述,因为其文档下写的非常清楚,也很容易懂.这里我们说一下其余java的整合,mongodb配置请查看官方文档 1.首先我们应该导入期相关依赖, org.mongo ...
- java Spring整合Freemarker的详细步骤
java Spring整合Freemarker的详细步骤 作者: 字体:[增加 减小] 类型:转载 时间:2013-11-14我要评论 本文对Spring整合Freemarker步骤做了详细的说明,按 ...
- 解惑rJava R与Java的高速通道
解惑rJava R与Java的高速通道 R的极客理想系列文章,涵盖了R的思想,使用,工具,创新等的一系列要点,以我个人的学习和体验去诠释R的强大. R语言作为统计学一门语言,一直在小众领域闪耀着光芒. ...
- java web 整合开发王者归来学习总结
第一章java web开发概述 胖客户端CS,瘦客户端BS(Browser) 网址请求---服务器处理响应-----返回结果-----浏览器显示 CGI可以动态生成页面,但是每个进程都要启动一个CGI ...
- 基于Java+SparkStreaming整合kafka编程
一.下载依赖jar包 具体可以参考:SparkStreaming整合kafka编程 二.创建Java工程 太简单,略. 三.实际例子 spark的安装包里面有好多例子,具体路径:spark-2.1.1 ...
- R与Java
对于从未接触代码的我,看到这些很陌生,现在需要做的是用r语言去做数据处理分析,将分析的结果给Java,然后在Java上输出想要的结果,没人给予指导,自己就这样瞎摸索,真希望有这方面的牛人给予指导,让一 ...
随机推荐
- Arduino小车学习与研究
信安系统设计基础实践模块 Arduino小车学习与研究 ================== 陈都(20135328) 余佳源(20135321) 莫凡(20135225) ---------- 索引 ...
- 如何使用GitHub?
我们一直用GitHub作为免费的远程仓库,如果是个人的开源项目,放到GitHub上是完全没有问题的.其实GitHub还是一个开源协作社区,通过GitHub,既可以让别人参与你的开源项目,也可以参与别人 ...
- [BZOJ1406][AHOI2007]密码箱(数论)
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1406 分析: (x+1)(x-1)是n的倍数 于是可以把n分解成n=ab,则a为(x+ ...
- 如何引用XML文件生成C#类
目录 XSD File Generate Class File Simply. 1 Why use XSD file to create C# classes?... 2 How to convert ...
- 网站开发技巧, 使用byte[]持久化用户个性设置
场景, 网站用户的个性化配置较多, 而且容易发生增加和改变, 如何在数据库保存是个问题. 为了避免数据库表字段经常变更, 我们设计在表增加一个varbinary(max)字段存储个性化配置. 个性化的 ...
- NABCD分析java音乐播放器
程设计题目:java音乐播放器 一.课程设计目的 1.编程设计音乐播放软件,使之实现音乐播放的功能. 2.培养学生用程序解决实际问题的能力和兴趣. 3.加深java中对多媒体编程的应用. 二.课程设计 ...
- [团队项目]Scrum 项目1.0 (演说视频)NABCD
1.确定选题. 应用NABCD模型,分析你们初步选定的项目,充分说明你们选题的理由. 录制为演说视频,上传到视频网站,并把链接发到团队博客上. 截止日期:2016.5.6日晚10点 2.SCRUM 流 ...
- 读代码之htmlParser
在以前使用HtmlParser时,并未考虑过遇到org.htmlparser.tags之外的Tag怎么处理.直到碰到这样的一个标签,如果不加处理,HtmlParser无法对其进行处理.查阅自定义标签之 ...
- 【HDU 1009】FatMouse' Trade
题 Description FatMouse prepared M pounds of cat food, ready to trade with the cats guarding the ware ...
- RBAC(基于角色的访问控制权限)表结构
Rbac 支持两种类,PhpManager(基于文件的) 和 DbManager(基于数据库的) 权限:就是指用户是否可以执行哪些操作 角色:就是上面说的一组操作的集合,角色还可以继承 在Yii2.0 ...