Java调用R(二)_JRI

时间:2023-03-09 02:11:17
Java调用R(二)_JRI

推荐使用。相比RServe更灵活,效率更高。

基本步骤

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();
}
}

测试通过。