阅读导读:

1.什么是RJava?

2.怎样安装RJava?

3.怎样用RJava实现R调用Java?









1.
rJava介绍

rJava是一个R语言和Java语言的通信接口。通过底层JNI实现调用,同意在R中直接调用Java的对象和方法。



rJava还提供了Java调用R的功能,是通过JRI(Java/R Interface)实现的。

JRI如今已经被嵌入到rJava的包中,我们也能够单独试用这个功能。如今rJava包。已经成为非常多基于Java开发R包的基础功能组件。

正式因为rJava是底层接口,并使用JNI作为接口调用,所以效率很高。在JRI的方案中,JVM直接通过内存直接载入RVM。调用过程性能差点儿无损耗。因此是很高效连接通道,是R和Java通信的首选开发包。

2.
rJava安装



系统环境:

  • Linux Ubuntu 12.04.2 LTS 64bit server
  • R version 3.0.1 64bit
  • Java (Oracle SUN) 1.6.0_29 64bit Server VM

~ uname -a

Linux conan 3.5.0-23-generic #35~precise1-Ubuntu SMP Fri Jan 25 17:13:26 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux



~ cat /etc/issue

Ubuntu 12.04.2 LTS \n \l



~ R --version

R version 3.0.1 (2013-05-16) -- "Good Sport"

Copyright (C) 2013 The R Foundation for Statistical Computing

Platform: x86_64-pc-linux-gnu (64-bit)



R is free software and comes with ABSOLUTELY NO WARRANTY.

You are welcome to redistribute it under the terms of the

GNU General Public License versions 2 or 3.

For more information about these matters see



http://www.gnu.org/licenses/.



~ java -version

java version "1.6.0_29"

Java(TM) SE Runtime Environment (build 1.6.0_29-b11)

Java HotSpot(TM) 64-Bit Server VM (build 20.4-b02, mixed mode)

rJava安装

#配置rJava环境

~ sudo R CMD javareconf



#启动R

~ sudo R

> install.packages("rJava")

installing via 'install.libs.R' to /usr/local/lib/R/site-library/rJava

** R

** inst

** preparing package for lazy loading

** help

*** installing help indices

** building package indices

** testing if installed package can be loaded

* DONE (rJava)



The downloaded source packages are in

        ‘/tmp/RtmpiZyCE7/downloaded_packages’

3.
rJava实现R调用Java

在R环境中。使用rJava包编程

#载入rJava包

> library(rJava)

> search()

[1] ".GlobalEnv"        "package:rJava"     "package:stats"

[4] "package:graphics"  "package:grDevices" "package:utils"

[7] "package:datasets"  "package:methods"   "Autoloads"

[10] "package:base"



#启动JVM

> .jinit()



#声明并赋值到字符串

> s <- .jnew("java/lang/String", "Hello World!")

> s

[1] "Java-Object{Hello World!}"



#查看字符串长度

> .jcall(s,"I","length")

[1] 12



#索引World的位置

> .jcall(s,"I","indexOf","World")

[1] 6



#查看concat的方法声明

> .jmethods(s,"concat")

[1] "public java.lang.String java.lang.String.concat(java.lang.String)"



#使用concat方法连接字符串

> .jcall(s,"Ljava/lang/String;","concat",s)

[1] "Hello World!Hello World!"



#打印字符串对象

> print(s)

[1] "Java-Object{Hello World!}"



#打印字符串值

> .jstrVal(s)

[1] "Hello World!"

rJava优化过的方法调用。用$来调用方法

#同.jcall(s,"I","length")

> s$length()

[1] 12



#同.jcall(s,"I","indexOf","World")

> s$indexOf("World")

[1] 6

4. rJava(JRI)实现Java调用R (win7)

在win7中安装rJava

系统环境:

  • win7 64bit 旗舰版
  • R 3.0.1
  • Java 1.6.0_45

环境变量设置

PATH: C:\Program Files\R\R-3.0.1\bin\x64;D:\toolkit\java\jdk6\bin;;D:\toolkit\java\jdk6\jre\bin\server

JAVA_HOME: D:\toolkit\java\jdk6

CLASSPATH: C:\Program Files\R\R-3.0.1\library\rJava\jri

在R中安装rJava

> install.packages("rJava")



#载入rJava

> library(rJava)

> .jinit()



#R调用Java变量測试

> s <- .jnew("java/lang/String", "Hello World!")

> s

[1] "Java-Object{Hello World!}"

启动Eclipse编写程

package org.conan.r.rjava;



import org.rosuda.JRI.Rengine;



public class DemoRJava {



    public static void main(String[] args) {

        DemoRJava demo = new DemoRJava();

        demo.callRJava();

    }



    public void callRJava() {

        Rengine re = new Rengine(new String[] { "--vanilla" }, false, null);

        if (!re.waitForR()) {

            System.out.println("Cannot load R");

            return;

        }

        

        //打印变量

        String version = re.eval("R.version.string").asString();

        System.out.println(version);



        //循环打印数组

        double[] arr = re.eval("rnorm(10)").asDoubleArray();

        for (double a : arr) {

            System.out.print(a + ",");

        }

        re.end();

    }

}

在Eclipse启动设置VM參数:

-Djava.library.path="C:\Program Files\R\R-3.0.1\library\rJava\jri\x64"

mod=image&aid=9234&size=300x300&key=c3fb7cbb1d59469d&nocache=yes&type=fixnone" border="0" width="300" alt="" style="margin:0px; padding:0px; word-wrap:break-word; max-width:400px; color:rgb(68,68,68); font-family:Tahoma,'Microsoft Yahei',Simsun; font-size:14px; line-height:21px">

执行结果:

R version 3.0.1 (2013-05-16)

0.04051018703700011,-0.3321596519938258,0.45642459001166913,-1.1907153494936031,1.5872266854172385,1.3639721994863943,-0.6309712627586983,-1.5226698569087498,-1.0416402147174952,0.4864034017637044,

打包DemoRJava.jar

在Eclipse中完毕打包,上传到linux环境,继续測试。

5.
rJava(JRI)实现Java调用R (Ubuntu)

新建文件夹DemoRJava,上传DemoRJava.jar到DemoRJava

~ mkdir /home/conan/R/DemoRJava

~ cd /home/conan/R/DemoRJava

~ ls -l

-rw-r--r-- 1 conan conan 1328 Aug  8  2013 DemoRJava.jar

执行Jar包

~ export R_HOME=/usr/lib/R

~ java -Djava.library.path=/usr/local/lib/R/site-library/rJava/jri -cp /usr/local/lib/R/site-library/rJava/jri/JRI.jar:/home/conan/R/DemoRJava/DemoRJava.jar org.conan.r.rjava.DemoRJava

执行结果

R version 3.0.1 (2013-05-16)

0.6374494596732511,1.3413824702002808,0.04573045670001342,-0.6885617932810327,0.14970067632722675,-0.3989493870007832,-0.6148250252955993,0.40132038323714453,-0.5385260423222166,0.3459850956295771,

我们完毕了。R和Java的互调。

包含了R通过rJava调用Java,Java通过JRI调用R。

并演示了win和linux中的用法。

解惑rJava R与Java的快速通道的更多相关文章

  1. 解惑rJava R与Java的高速通道

    解惑rJava R与Java的高速通道 R的极客理想系列文章,涵盖了R的思想,使用,工具,创新等的一系列要点,以我个人的学习和体验去诠释R的强大. R语言作为统计学一门语言,一直在小众领域闪耀着光芒. ...

  2. R与JAVA的整合

    R是统计计算的强大工具,而JAVA是做应用系统的主流语言,两者天然具有整合的需要.关于整合,一方面,R中可以创建JAVA对象调用JAVA方法,另一方面,JAVA中可以转换R的数据类型调用R的函数,互相 ...

  3. JAVA WEB快速入门之从编写一个基于SpringBoot+Mybatis快速创建的REST API项目了解SpringBoot、SpringMVC REST API、Mybatis等相关知识

    JAVA WEB快速入门系列之前的相关文章如下:(文章全部本人[梦在旅途原创],文中内容可能部份图片.代码参照网上资源) 第一篇:JAVA WEB快速入门之环境搭建 第二篇:JAVA WEB快速入门之 ...

  4. JAVA WEB快速入门之从编写一个基于SpringMVC框架的网站了解Maven、SpringMVC、SpringJDBC

    接上篇<JAVA WEB快速入门之通过一个简单的Spring项目了解Spring的核心(AOP.IOC)>,了解了Spring的核心(AOP.IOC)后,我们再来学习与实践Maven.Sp ...

  5. r与java整合(转)

    http://jliblog.com/archives/10 R是统计计算的强大工具,而JAVA是做应用系统的主流语言,两者天然具有整合的需要.关于整合,一方面,R中可以创建JAVA对象调用JAVA方 ...

  6. (私人收藏)[开发必备]最全Java离线快速查找手册(可查询可学习,带实例)

    (私人收藏)[开发必备]最全Java离线快速查找手册(可查询可学习,带实例) https://pan.baidu.com/s/1L54VuFwCdKVnQGVc8vD1TQnwmj java手册 Ja ...

  7. Java NIO:通道

    最近打算把Java网络编程相关的知识深入一下(IO.NIO.Socket编程.Netty) Java NIO主要需要理解缓冲区.通道.选择器三个核心概念,作为对Java I/O的补充, 以提升大批量数 ...

  8. Java API 快速速查宝典

    Java API 快速速查宝典 作者:明日科技,陈丹丹,李银龙,王国辉 著 出版社:人民邮电出版社 出版时间:2012年5月 Java编程的最基本要素是方法.属性和事件,掌握这些要素,就掌握了解决实际 ...

  9. Java Web快速入门——全十讲

    Java Web快速入门——全十讲 这是一次培训的讲义,就是我在给学生讲的过程中记录下来的,非常完整,原来发表在Blog上,我感觉这里的学生可能更需要. 内容比较长,你可以先收藏起来,慢慢看. 第一讲 ...

随机推荐

  1. [JavaEE] Hibernate连接池配置测试

    转载自51CTO http://developer.51cto.com/art/200906/129914.htm Hibernate支持第三方的连接池,官方推荐的连接池是C3P0,Proxool,以 ...

  2. DevExpress的GridControl拖拽DraopDown后计算HitInfo的RowHandle错误

    最近在使用GridControl的拖拽功能时候遇到了一个问题:当GridControl触发DropDrop事件时,计算对应的RowHandle错误.当把鼠标拖拽到GridView一个单元格的靠上面的部 ...

  3. 根据项目类型导入Excel文件到不同数据库

    前提:如果您要针对不同的业务做数据导入,可以参考下这个项目,这个项目的原理就是根据文件名进行区分,然后导入不同的数据表.下面我就写个Demo演示下: 学生表-- 主键,学生姓名,学生年龄,学校归属 教 ...

  4. Tomcat 日志切割

    一.installing 日志轮训工具 yum  install cronolog -y 二.安装.修改tomcat文件 wget  http://mirrors.shuosc.org/apache/ ...

  5. 使用IDEA搭建一个 Spring + Spring MVC 的Web项目(零配置文件)

    注解是Spring的一个构建的一个重要手段,减少写配置文件,下面解释一下一些要用到的注解: @Configuration 作用于类上面,声明当前类是一个配置类(相当于一个Spring的xml文件)@C ...

  6. 错误信息:getOutputStream() has already been called for this response

    原因(转): getOutputStream()和getWriter()这两个方法不能在一个请求内同时使用, 如果使用forward,这时将要跳转到的页面是要用getWriter()方法获得输出流把页 ...

  7. pwiz, a model generator

    文档链接 pwiz is a little script that ships with peewee and is capable of introspecting an existing data ...

  8. PostgreSQL 满足条件时插入数据

    例如:当表中不存在某记录时,才插入这条记录. INSERT INTO 表名(列名1, 列名2) SELECT '值1', '值2' WHERE NOT EXISTS ( SELECT * FROM 表 ...

  9. (转)RabbitMQ学习之exchange总结

    http://blog.csdn.net/zhu_tianwei/article/details/53969674 前面介绍了几类exchange的作用,这个总结一下: direct:消息会被推送至绑 ...

  10. 优动漫PAINT新建文件

    在优动漫PAINT软件中展开任何一项操作之前,都需要新建或打开图形文件.新建文件之后,用户可根据自己的需求进行相应的设置,这样将大大节省后期制作的时间! 在优动漫PAINT中新建图形文件的方法: 方法 ...