JAVA调用R

 第一次写博客,就记录最近因业务需求接触到的rJava。

 众所周知,JAVA以其面向对象的思维能够快速构建系统应用,也正因为如此数学建模和计算能力非其所长,如果该系统需要进行大量的统计或者优化的计算,调用R是一种很好的方式。

 首先要保证本机或者有一台服务器作为R运行环境,R安装包可从https://mirrors.tuna.tsinghua.edu.cn/CRAN/ 选择下载对应系统的安装包,当前最新版本R-3.4.3。

 安装好后,打开R可视化窗口,相关demo可以输入demo()查看,查询帮助help()

 若对R感兴趣可自行深入学习,这不做细讲。我们先编写一个测试R脚本,打开 文件->选择新建程序脚本

保存一指定路径,本文保存在D盘目录下。

在R可视化窗口中测试下R脚本,引入刚才的R脚本 source("D:/test.R"),调用方法test.func(3,2),可以看到测试脚本方法返回结果


 好了,我们现在尝试用Java调用R,这里我只介绍RServe方法调用R。

 先在R服务器上执行命令install.packages("Rserve")安装Rserve,然后引入Rserve框架library(Rserve),最后启动Rserve(),出现下面返回则表示Rserve已成功启动

Java程序中引入所需的REngine.jar和Rserve.jar两个jar包,或则maven引入

<dependency>
 <groupId>org.rosuda.REngine</groupId>
      <artifactId>Rserve</artifactId>
      <version>1.8.1</version>
</dependency

最后Java调用R

private RConnection rTestCon = null;
private RConnection getInitRserve() throws RserveException {
    if(rTestCon == null) {
        // rServerIP 为R运行的服务器ip,若为本机直接new RConnection()
        rTestCon = new RConnection(rServerIP);
        String rStoreFile = "D:/test.R";
        rTestCon.eval("source('"+rStoreFile+"')");
    }
    return rTestCon;
}


@Test
public void test() throws RserveException, REXPMismatchException {
    RConnection rTestCon = getInitRserve();
    int tmp0 = 1;
    int tmp1 = 2;
    REXP rexp = rTestCon.eval("test.func("+tmp0+","+tmp1+")");
    System.out.println(rexp.asDouble());
} 
运行代码,控制台输出

 好了大功告成,第一次使用R,如有理解有误的地方忘大神留言指出。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值