在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进行安装。

选择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 的测试告一段落,这也是在为以后的项目中的模型分析做铺垫。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Java可以通过Rserve这个R语言的远程调用服务来调用R语言的函数。在Java,我们需要使用Rserve连接到R语言的服务器,然后使用RConnection类创建一个与R语言的连接,最后使用RConnection类的assign()方法来调用R语言的赋值函数。 具体的操作步骤如下: 1. 在R语言使用Rserve库启动R语言服务器,可以使用以下命令启动: ```R library(Rserve) Rserve() ``` 2. 在Java使用Rserve连接到R语言的服务器,可以使用以下代码: ```java import org.rosuda.REngine.Rserve.RConnection; RConnection connection = new RConnection("localhost", 6311); // 连接到Rserve服务器 ``` 3. 调用R语言的赋值函数,例如: ```java connection.assign("x", new double[]{1.0, 2.0, 3.0}); // 将向量[1.0, 2.0, 3.0]赋值给变量x ``` 在这个例子,我们使用RConnection类的assign()方法将一个Java数组赋值给了R语言的变量x,这相当于在R语言执行了以下命令: ```R x <- c(1.0, 2.0, 3.0) ``` 如果您想要调用其他的R语言函数,也可以使用RConnection类的eval()方法来执行R代码。例如,如果您想要调用一个名为myfunction的R函数,可以使用以下代码: ```java connection.eval("myfunction(x)"); // 调用名为myfunction的R函数,并传入变量x作为参数 ``` 其,"myfunction(x)"是一个字符串,表示要在R语言执行的代码。如果myfunction函数返回了一个结果,可以使用RConnection类的get()方法来获取这个结果。例如: ```java double[] result = connection.eval("myfunction(x)").asDoubles(); // 获取myfunction函数的返回结果,并将其转换为Java的double数组 ``` 以上就是Java调用R语言赋值函数的基本方法。需要注意的是,在使用Rserve时需要确保R语言和Rserve都已经正确安装,并且已经启动了Rserve服务器。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值