Java与R语言的配置,调用

来源:互联网 发布:域名费用 编辑:程序博客网 时间:2024/05/18 00:53

    我是最近才接触到了R语言,所以用起来有很多的问题,之前只是想单纯想用java调用到R语言中的一些东西,没有想到这个事情并不是想象的那么简单的。好了,闲话不多说,下面我来说说我在运用R的时候遇上的问题吧。

    第一步,配置R的环境。

    首先,需要下载一个RGUI的东西,这个东西在我的理解上就跟JVM一个样子,我下载的版本是R 3.1.3(顺便说一句,在64位系统下面的32位的RGUI和64位的RGUI都可以使用的,我的电脑系统是64位的)。下载安装完成,我相信用java的朋友都把java的环境给配置好了,这里我就不讲java的配置了。打开系统的环境变量,在CLASSPATH中添加D:\R-3.1.3\library\rJava\jri\;(就是你那个rjava包的路径),然后在path中添加D:\R-3.1.3\bin\x64;D:\R-3.1.3\library\rJava\jri\x64;(我的系统是64位的,32位的把x64换成i386,但是强调一点你在多少位的JVM中运行R就得把R配置成多少位的,这样子配置会省很多的事情),然后配置R_HOME:D:\R-3.1.3(安装的路径)。这样子配置就算是把R的东西给配置好了。

  第二步,下载rjava的包。

   然后,你需要去下载你对应的rjava包,在RGUI中选程序包,选一个隔你最近的一个城市然后把rjava包下载(有时候下载不起,我在后面可以提供R 3.1.3版本的rjava包,这个包的版本不一样后面在java中一样的不能调用r)。把下载好的rjava包放在R-3.1.3\library下面(解压了的文件夹),OK下载好了,位置也放好了,进入下一步。

  第三步,在myeclipse中调用R。

  先在rjava包jri中找到3个包,JRI.jar,JRIEngnie.jar和REngine.jar,将这3个包放在自己的java工程中导入进去。然后在R-3.1.3\library\rJava\jri\examples中找到rtest.java和rtest2.java这两个文件,直接复制到自己的java工程中。先说说这两种连接方式有什么不同,rtest.java是直接把R的console引在了我们的java控制台中,而rtest2.java是启动一个R的一个服务,这两种方式各有优势,自己进行选择,我选择的是rtest.java的方式。说说这里会遇到的问题,第一,可能会出现java.library.path的问题,那是因为没有找到那个库,可以在VM中给他指向你的那个库在vm arguments里添加-Djava.library.path=.../.../lib;第二,可能会出现什么不能在32位系统平台中运行64位的 .dll ,出现这个错的时候说明你的配置出问题了,你要去检查你的这个java程序中配置的java是不是64位的,反正就是要把这两个的位数对应起来就行了。遇到最多的问题就是这两个了,然后基本技能跑通这个程序。

  第四步,Spring MVC的项目中调用语言

  可以说大多数的开发人员最重要的目的就是把这个rjava运用到项目中去。在这个步骤中,我将这个调用的方法写成了一个工具类,但是我遇见了两个大的问题,第一个,因为在项目是在tomcat中发布的,所以tomcat在加载的时候没有找到R的.dll文件,这个问题可以通过System.out.println(System.getProperty("java.library.path"));这句话,找到你用的那个tomcat下面加载文件的目录,将这个jri.dll放进去,重新运行这个就行了。第二个,是我在写工具类的时候发生的一个错误,我没有考虑到自己会多次使用到这个工具,从而导致我的电脑启动了很多个JVM,内存溢出,死机。这个问题,是通过一个单例模式的建立来解决的,我只让这个Rengine在项目中被实例化一次,这样子,他就只能被启动一次,不会导致电脑死机等等。

  第五步,调用R的方法

  这里调用的方法是rengine.eval("xxxxx"),xxx就是你写的R语言的代码。OK,介绍完毕。

最后就是我给大家提供的rjava包和R的安装包,http://pan.baidu.com/s/1bnynNfp。

2 0
原创粉丝点击