在Java中使用Rserve调用R

昨天跟老师一起讨论之后得到了新的任务,讨论没得到什么结果,又收到了新的学习任务——在Java中调用R使用Rserve

先介绍一下R

R是一个用于统计计算和统计制图的优秀工具。其功能包括:数据存储和处理系统;数组运算工具(其向量、矩阵运算方面功能尤其强大);完整连贯的统计分析工具;优秀的统计制图功能;简便而强大的编程语言:可操纵数据的输入和输入,可实现分支、循环,用户可自定义功能 。
Java语言是目前最流行的语言,所以今天尝试通过java来调用R函数为下面通过调用数学函数实现业务功能做基础。
目前我在32windows7上做测试。
1. 首先需要下载Rwindows安装程序,地址为http://cran.r-project.org/然后安装就可以了。
2. 安装Rserve,可以通过R界面中的命令行输入:install.packages("Rserve")或者在R界面上选择:程序包->安装程序包,然后找到Rserve进行安装。

在Java中使用Rserve调用R_第1张图片

选择China(Hefei)服务器速度较快,China(BeiJing1)没有速度,安装完成之后就ok啦!

3. 启动Rserve, R界面中的命令行中输入:library(Rserve)来加载Rserve,然后输入Rserve()进行启动服务。
到此Rserve已经配置并启动好,下面轮到Java程序调用了。
1. 下载Rserve提供的jar包,打开http://www.rforge.net/Rserve/files/,下载REngine.jarRserveEngine.jar,然后放到自己的项目中,并引入。
2. 编辑代码如下:

import org.rosuda.REngine.REXPMismatchException;
import org.rosuda.REngine.REngineException;
import org.rosuda.REngine.Rserve.*;
import org.rosuda.REngine.Rserve.RserveException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import rserver.function.RService;

public class CallR {
	private RService rService;
	private static final Logger logger = LoggerFactory.getLogger(CallR.class);
	public CallR() throws REXPMismatchException, REngineException
	{ 
		rService = new RService();
		RConnection re = rService.startTransaction(); //开始独占工作空间
		double[] xx = {1,2,3,4,5,6,7,8,9,10}; //生成两个数组
		double[] yy = {1,2,3,4,5,6,7,8,9,10};
		try {
  	    re.assign("x", xx); //给R的变量赋值
  	    re.assign("y", yy);
  	    System.out.println("jpeg('D:\\\\test.jpg')");
  	    re.eval("jpeg('D:\\\\test.jpg')");
  	    re.eval("qqplot(x, y)");//绘图
  	    re.eval("dev.off()");
  
  	    } catch (RserveException e) {
  		    logger.warn("Failed to create temp file", e);
  		} finally {
  	   this.rService.endTransaction(); //退出时一定要关闭此工作空间
  	}
	}
	 public static void main(String args[]) throws REXPMismatchException, REngineException
	   {  new CallR();  }
}

代码运行之后在D盘下就会生成一个jpg图片如下图所示,至此java连接R 的测试告一段落,这也是在为以后的项目中的模型分析做铺垫。

在Java中使用Rserve调用R_第2张图片
本文代码下载链接 http://download.csdn.net/detail/ryl219362/5807323

你可能感兴趣的:(数据挖掘)