r与java连接_Rserver实现Java与R的通信

本文介绍了如何使用Rserve实现Java与R的通信。首先讲解了Rserve的基本概念和安装步骤,接着展示了如何启动Rserver服务。然后,详细说明了Java如何通过RConnection类远程连接Rserve,包括建立连接、执行R命令和调用R脚本。最后,给出了一个Java示例,演示了查看R版本、执行R语句、调用外部R脚本以及使用R语言画图的功能。
摘要由CSDN通过智能技术生成

1、Rserve介绍

2、Rserve安装

install.packages("Rserve")

3、启动Rserver服务

> library(Rserve)

> Rserve()

Starting Rserve...

"d:\PROGRA~2\R\R-32~1.5\library\Rserve\libs\x64\Rserve.exe"

>

4、Java远程连接Rserve

REngine.jar

RserveEngine.jar

在Rserver的安装目录中R_HOME \library\Rserve\java也有这两个包名字不同但是可以用。

把这两个包加入到项目的classpath中即可

RConnection Connection = new RConnection(); //建立连接

Connection.assgin()该方法进行赋值

Connection.eval()该方法调用R函数

5、编写Java脚本

import org.rosuda.REngine.REXP;

import org.rosuda.REngine.Rserve.RConnection;

import org.rosuda.REngine.REXPMismatchException;

import org.rosuda.REngine.REngineException;

import org.rosuda.REngine.Rserve.RserveException;

public class Test6 {

public static void main(String[] args) throws REngineException {

// TODO Auto-generated method stub

try {

callRserve();

} catch (RserveException e) {

e.printStackTrace();

} catch (REXPMismatchException e) {

e.printStackTrace();

}

}

static void callRserve() throws REXPMismatchException, REngineException{

RConnection Connection = new RConnection(); //建立连接

//查看R版本

System.out.println("##########查看R版本###########");

String rv = Connection.eval("R.version.string").asString();

System.out.println(rv);

REXP x = Connection.eval("R.version.string ");

System.out.println(x.asString());

//执行R语句

System.out.println("##########执行R语句###########");

double [] arr = Connection.eval("runif(10)").asDoubles();

for(double d : arr) {

System.out.println(d);

}

//调取外部R脚本

System.out.println("##########调取外部R脚本###########");

String fileName = "E:\\WorkTestData\\area.R";//area.R里R语句为:area

Connection.assign("fileName", fileName); //赋值

Connection.eval("source(fileName)"); //sourceR脚本

REXP rexp = Connection.eval("area(10)"); //执行R语句

System.out.println("Area of 10 is " + rexp.asDouble());

//使用R语言画图

System.out.println("##########使用R语言画图###########");

double[] xx = {1,2,3,4,5,6,7,8,9,10}; //生成两个数组

double[] yy = {1,4,9,16,25,36,49,64,81,100};

Connection.assign("x", xx); //给R的变量赋值

Connection.assign("y", yy);

System.out.println("jpeg('E:/WorkTestData//test.jpg')");

Connection.eval("jpeg('E:/WorkTestData/test.jpg')");

Connection.eval("plot(x, y)");//绘图

Connection.eval("dev.off()");

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值