java调用R语言--以Rserve方式

Java调用R语言——以Rserve方式

导语

Rserve是一个基于TCP/IP协议的,方便C/C++、PHP、Java、Python等语言调用R语言的程序包。 Rserve可提供远程链接、认证、文件传输等功能。项目应用中,可以在后台部署R用以承担统计建模、数据分析、绘图等任务。

一、Rserve包的安装与启动

  1. 服务器上安装Java与R
    install.packages("Rserve",repos = "http://mirrors.ustc.edu.cn/CRAN/")
  2. 服务器命令行端启动Rserve
    R CMD Rserve --RS-enable-remote
    -enable-remote:允许远程链接
  3. 示例代码:(多线程调用R语言)
package rsession;

import  org.rosuda.REngine.Rserve.RConnection;

public class RconnectionDemo implements Runnable {try {
                re = new RConnection("10.0.10.51");      
                double[] r = re.eval("rnorm(10)").asDoubles();

                System.out.println(threadName + "is running"+ "  " +  r[2]);

              } catch (Exception e) {

                               e.printStackTrace();

                                }

     }

public static void main(String[] args) {

Thread beta = new Thread(runner);

 Thread gamma = new Thread(runner);

 alpha.setName("Alpha thread");

 alpha.start();

 gamma.start();


}

以Rserve方式实现Java调用R语言的几点注记:
1. 服务器端启动Rserve服务后,远程Java调用报错信息:Connection exception is thrown...Cannot connect: Connection timed out: connect发生原因(一般情况下):服务器防火墙拒绝链接
解决方法:关闭防火墙,命令如下:
systemctl stop firewalld(临时关闭防火墙,服务器重启后,防火墙自启动)
2. 关于Java中向R语言环境中传递参数方法与Java链接R语言-通过rJava一致;
3. 通过Rserve实现Java调用R语言,需导入Rserve.jar架包;
4. 通过Rserve实现Java调用R语言,可以克服Rengine单例模式的弊端,可实现同时调用多个R语言session分别运算,而且各个session中变量相互独立。

你可能感兴趣的:(java调用R语言--以Rserve方式)