Java调用R_JRI(转)

Posted yasepix

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java调用R_JRI(转)相关的知识,希望对你有一定的参考价值。

基本步骤


1.  R中需要安装rJava包。

2.  系统变量Path加上

C:\Program Files\R\R-3.0.1\bin\i386;C:\Program Files\R\R-3.0.1\library\rJava\jri

     系统变量Classpath加上:

C:\Program Files\R\R-3.0.1\library\rJava\jri\JRI.jar

3.  项目中加入JRI.jar, JRIEngine.jar, REngine.jar

4.  rJava自带的测试实例,加入项目测试,执行成功。配置完成。

5.  Java本地测试(项目test/rtest.java以及 test/TestDLL.java

   C:\Program Files\R\R-3.0.1\library\rJava\jri\examples\有rJava自带的实例


R脚本分条执行,基本语法同Rserve. for循环时需要java变量和R变量的转换。


6. Java web的lib目录下加入JRI.jar, JRIEngine.jar, REngine.jar

      C:\Program Files\R\R-3.0.1\library\rJava\jri\i386\jri.dll放入Java Path中或者Tomcat bin目录中(就是将jri.dll放入java web项目的classpath 中)


7.  利用自带实例rtest中的TextConsole方式实例化Rengine对象

class TextConsole implements RMainLoopCallbacks{} 

Rengine re=new Rengine(args, false, new TextConsole());


8.   经个人测试,在项目中多次调用Rengine re=new Rengine(args, false, new TextConsole()); 会在第二次报错。

最后将Rengine对象实例化改成 单例 模式(重要),项目初始化时一并进行实例化。

对于R中需要加载的外部包,可以一并在实例化re时,执行。

        

  1. public void callR(){  
  2.           
  3.         System.out.println(System.getProperty("java.library.path"));  
  4.         System.loadLibrary("jri");  
  5.           
  6.         try {  
  7.             //Rengine re = new Rengine(null, false,  new TextConsole());  
  8.             Rengine re = rengine.getInstance();  
  9.   
  10.             re.eval("setwd(‘f:/R_Stat/‘)");  
  11.             re.eval("selected_dat <- read.csv(‘dat.csv‘,head=TRUE,sep=‘,‘ , as.is = T)");  
  12.             {  
  13.                 ...  
  14.                 re.eval("rect(1, 5, 3, 7, col=‘white‘)");  
  15.                 re.eval("dev.off()");  
  16.             }  
  17.         } catch (Exception e) {  
  18.             e.printStackTrace();  
  19.         }         
  20.     }  

 

        测试通过。


补充:Rengine的构造设成单例

 

  1. class rengine{  
  2.     private static Rengine re;  
  3.     private rengine(){  
  4.     }  
  5.     public static Rengine getRegineInstance(){  
  6.         if(re ==null){  
  7.              re = new Rengine(null, false, new TextConsole());  
  8.              re.eval("library(arules)");  
  9.         }  
  10.         return re;  
  11.     }  
  12. }  














以上是关于Java调用R_JRI(转)的主要内容,如果未能解决你的问题,请参考以下文章

jacob 问题,java 调用jacob,先操作word 转PDF,再操作excel 转pdf,这样就会报错

java调用ffmpeg获取转码进度

Java异步调用转同步的5种方式

(转)java调用python脚本

java中5种异步转同步方法

用java调用oracle存储过程总结(转)