阅读导读:

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. 二次排序问题(分别使用Hadoop和Spark实现)

    不多说,直接上干货! 这篇博客里的算法部分的内容来自<数据算法:Hadoop/Spark大数据处理技巧>一书,不过书中的代码虽然思路正确,但是代码不完整,并且只有java部分的编程,我在它 ...

  2. os.clock()导致的bug

    os.clock () 功能:返回一个程序使用CPU时间的一个近似值 最近做了一个功能,这个功能需要统计时间间隔,例如每隔0.5秒做一次调用. 我用了os.clock()去统计时间,结果在pc机上都没 ...

  3. 前端-js进阶和JQ源码思维导图笔记

    看不清的朋友右键保存或者新窗口打开哦!喜欢我可以关注我,还有更多前端思维导图笔记

  4. Android WindowManager和WindowManager.LayoutParams的使用以及实现悬浮窗口的方法

    1.理清概念 我们使用过Dialog和PopupWindow,还有Toast,它们都显示在Activity之上.那么我们首先需要理解的是android中是如何去绘制这些UI的呢?这里我只讲我所理解的, ...

  5. 【Oracle】三种方式查看SQL语句的执行计划

    查看执行计划的方式有三种: EXPLAIN PLAN .V$SQL_PLAN .SQL*PLUS AUTOTRACE 1.EXPLAIN PLAN: 显示执行相应语句时可以使用的理论计划 读取执行计划 ...

  6. aes加密算法的一个问题

    百度“delphi aes”出来的结果,千篇一律,都是相互转载,但是没有人发现EldoS, Alexander Ionov于1998-2001写的ElAes.pas代码,存在一个问题. 相同的key和 ...

  7. HTML 引入 CSS、JS 的三种方式

    描述部分按 CSS 来的,其实 JavaScript 也一样,具体区别看代码 外部样式表 当样式需要被应用到很多页面的时候,外部样式表将是理想的选择.使用外部样式表,你就可以通过更改一个文件来改变整个 ...

  8. Eclipse 中的 Bulid Path

    什么是Build Path? Build Path是指定Java工程所包含的资源属性集合. 在一个成熟的Java工程中,不仅仅有自己编写的源代码,还需要引用系统运行库(JRE).第三方的功能扩展库.工 ...

  9. Ubuntu 16.04 安装python3.6 环境并设置为默认

    1.添加python3.6安装包,并且安装 sudo apt-get install software-properties-common 2.下载python3.6 sudo add-apt-rep ...

  10. python二级登陆菜单

    """ 1.三级菜单 注册 登陆 注销 2.进入每一个一级菜单,都会有下一级的菜单"""user_item = dict()try: whi ...