阅读导读:

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. python学习-字符串 列表 元祖

    目录 Python翻转字符串(reverse string) 简单的步长为-1, 即字符串的翻转(常用) 递归反转 借用列表,使用reverse()方法 字符串常用操作 index split 切片 ...

  2. jah老师中关于集合的总结

    --------概述:1.Java 集合就像一种容器,可以把多个对象的引用放入容器中 2.Java 集合类可以用于存储数量不等的多个对象,还可用于保存具有映射关系的关联数组3.Java 集合可分为 S ...

  3. 禁止button标签提交form表单,变成普通按钮

    button有个type属性,属性值可为button.submit.reset button=普通按钮,直接点击不会提交表单submit=提交按钮,点击后会提交表单reset=表单复位 当button ...

  4. C#泛型类的用途和说明

    class Program    {        public class Test<T, S>        {           //泛型类的类型参数可用于类成员          ...

  5. Memcached 与 Redis 的关键性能指标比较

    性能对比: Redis 只使用单核,而 Memcached 可以使用多核,所以平均每一个核上 Redis在存储小数据时比 Memcached 性 能更高. 而在 100k 以上的数据中,Memcach ...

  6. [转]解决C# WinForm 中 VSHOST.EXE 程序不关闭的问题

    右击“解决方案”--属性-调试栏-启用调试器部分-“启用Visual studio宿主进程”不勾选

  7. Service不完全解析

    本篇的内容并不是介绍service使用方法和生命周期的,而是对其中的一些要点进行记录和分析. 我们都知道,Service是一个在后台执行的应用组件,用于在后台进行长期操作,例如进行网络事务,播放背景音 ...

  8. SQL学习整理

    SQL整理 SQL 对大小写不敏感! 一.对数据的操作 实现功能分类: 1. 增: 1.1 表存在,插入栏位: //插入新的行(按栏位的顺序插入) INSERT INTO Table_1 VALUES ...

  9. (链接)IDEA 2018 激活 IDEA 2018.3激活教程 最新的(三种)—2018.11.26亲测

    破解不成功的请注意时效性,写于2019/2/8,以下第一种激活方法亲测可用, 不过有时候破解成功了可能过几天突然就打不开了,双击无反应的说,这时候再按顺序 操作一遍就是了: 1)把idea64.exe ...

  10. 学习环境搭建2——安装django

    下载django https://www.djangoproject.com/download/ 选择最新的版本Latest release,下载后解压.在含有setup.py的文件夹中执行如下命令: ...