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时,执行。
- public void callR(){
- System.out.println(System.getProperty("java.library.path"));
- System.loadLibrary("jri");
- try {
- //Rengine re = new Rengine(null, false, new TextConsole());
- Rengine re = rengine.getInstance();
- re.eval("setwd(‘f:/R_Stat/‘)");
- re.eval("selected_dat <- read.csv(‘dat.csv‘,head=TRUE,sep=‘,‘ , as.is = T)");
- {
- ...
- re.eval("rect(1, 5, 3, 7, col=‘white‘)");
- re.eval("dev.off()");
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
测试通过。
补充:Rengine的构造设成单例
- class rengine{
- private static Rengine re;
- private rengine(){
- }
- public static Rengine getRegineInstance(){
- if(re ==null){
- re = new Rengine(null, false, new TextConsole());
- re.eval("library(arules)");
- }
- return re;
- }
- }
以上是关于Java调用R_JRI(转)的主要内容,如果未能解决你的问题,请参考以下文章