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时,执行。

[java] view plain copy

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

测试通过。

补充:Rengine的构造设成单例

[java] view plain copy

  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. }
时间: 2024-10-10 06:31:30

Java调用R(二)_JRI(转)的相关文章

JAVA调用R脚本

0 前言R是一种非常方便易用的绘图.统计分析.ML算法设计方面的脚本语言.实际中有这样一种场景:算法工程师用R搭建了机器学习算法模型,想用于javaweb之中但是又不想重新用java写一遍算法模型,那么可以考虑java程序中直接调用R的脚本.JAVA负责系统的构建,R用来做运算引擎,从而实现应用型和分析性相结合的系统. 本文将搞清楚如下几个问题: 1)java调用R的方式有哪些及每种方式如何使用? 2)这些调用方式的有哪些优缺点? 下面开始. 1 java调用R的两种方式1.1 远程调用模式(使

Java调用R语言

R是统计计算的强大工具,JAVA是做应用系统的主流语言.JAVA负责系统的构建,R用来做运算引擎,从而实现应用型和分析性相结合的系统. 一.Rserve(远程通信模式) Rserve是一个基于TCP/IP的服务器,通过二进制协议传输数据,可以提供远程连接,使得客户端语言能够调用R. Rserve作为一个package发布在CRAN上,可以直接使用install.packages("Rserve")进行安装.需要使用时在R控制台下加载该包,然后输入命令Rserve(),开启服务器就可以供

Rsession让Java调用R更简单

Rsession让Java调用R更简单 R的极客理想系列文章,涵盖了R的思想,使用,工具,创新等的一系列要点,以我个人的学习和体验去诠释R的强大. R语言作为统计学一门语言,一直在小众领域闪耀着光芒.直到大数据的爆发,R语言变成了一门炙手可热的数据分析的利器.随着越来越多的工程背景的人的加入,R语言的社区在迅速扩大成长.现在已不仅仅是统计领域,教育,银行,电商,互联网….都在使用R语言. 要成为有理想的极客,我们不能停留在语法上,要掌握牢固的数学,概率,统计知识,同时还要有创新精神,把R语言发挥

java调用R

环境:win7 32位  jdk1.7  R 2.15.0   java调用r主要有三种方式,rJava,rServer还有rCaller,这边主要讲用rJava调用 rJava是一个R语言和Java语言的通信接口,通过底层JNI实现调用,允许在R中直接调用Java的对象和方法.由于rJava是底层接口,并使用JNI作为接口调用,所以效率非常高.在JRI的方案中,JVM直接通过内存直接加载RVM,调用过程性能几乎无损耗,因此是非常高效连接通道,是R和Java通信的首选开发包. 之前用R3.0.2

Java调用R——rJava的安装和配置

rJava是Java通过JRI调用R所要安装的包.配置起来比较麻烦,我参考网上进行配置,使用rJava包中example里面的示例测试,控制台显示: Cannot find JRI native library! Please make sure that the JRI native library is in a directory listed in java.library.path. java.lang.UnsatisfiedLinkError: D:\developmentTools

JAVA调用R脚本 windwos路径下

RConnection c = new RConnection();// REXP x = c.eval("source('D:\\\\jiaoben\\\\RJava_test.R',encoding = \"UTF-8\")"); REXP x = c.eval("source('D:\\\\jiaoben\\\\Rjava_testx6.R',encoding = \"UTF-8\")");// REXP eval =

java 与 R 相互调用

https://www.r-project.org/ http://cos.name/2013/08/r-rjava-java/ http://blog.csdn.net/hwssg/article/details/39177959 目录 rJava介绍 rJava安装 rJava实现R调用Java rJava(JRI)实现Java调用R (win7) rJava(JRI)实现Java调用R (Ubuntu) 1. rJava介绍 rJava是一个R语言和Java语言的通信接口,通过底层JNI实

Java 调用 php接口(Ajax)(二)

由于项目里面需要用到Java调用PHP的充值接口,所以学习了一下,以下这个Demo是个小小的例子,写下来做个笔记> jsp页面: <%@ page language="java" import="java.util.*" pageEncoding="utf-8" contentType="text/html; charset=GBK"%> <% String path = request.getCont

java 基础(二)

java 基础(二)java 基础(二) 2016-2-1 by Damon 61. 编写多线程程序有几种实现方式 Java 5以前实现多线程有两种实现方法:一种是继承Thread类:另一种是实现Runnable接口.两种方式都要通过重写run()方法来定义线程的行为,推荐使用后者,因为Java中的继承是单继承,一个类有一个父类,如果继承了Thread类就无法再继承其他类了,显然使用Runnable接口更为灵活. 补充:Java 5以后创建线程还有第三种方式:实现Callable接口,该接口中的