• Java调用R(二)_JRI(转)


    基本步骤


    1.  R中需要安装rJava包。

    2.  系统变量Path加上

    C:Program FilesRR-3.0.1ini386;C:Program FilesRR-3.0.1library Javajri

         系统变量Classpath加上:

    C:Program FilesRR-3.0.1library JavajriJRI.jar

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

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

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

       C:Program FilesRR-3.0.1library Javajriexamples有rJava自带的实例


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


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

          C:Program FilesRR-3.0.1library Javajrii386jri.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正则表达式的总结
    Mysql数据库操作语句总结
    Java 如何抛出异常、自定义异常
    Java获取系统时间的四种方法
    Mysql与Oracle区别
    Oracle与MySQL的SQL语句区别
    sql语句的各种模糊查询
    基于SpringCloud的Microservices架构实战案例
    一个人走的快,一群人才走的远
    那些会阻碍程序员成长的细节[2]
  • 原文地址:https://www.cnblogs.com/yasepix/p/7307220.html
Copyright © 2020-2023  润新知