阅读导读:

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. SwiftUI 官方教程(七)

    7. 给子 View 传递数据 LandmarkDetail 现在依然使用硬编码的数据来显示地标.像 LandmarkRow 一样,LandmarkDetail 类型和它组合的其他 view 都需要一 ...

  2. web前端处理订单待支付倒计时计算显示问题

    在商城类项目的时候,有很多待支付的订单,有时候在订单列表页面会分别显示倒计时,就是页面会有很多倒计时的订单. 处理方法: 1.调用后端接口拿到所有的订单,获取所有的倒计时订单,获取到期时间(尽量时间戳 ...

  3. 文件操作:Directory,File,FielStream、StreamRead和StreamWriter的使用

    Directory文件类,File,FielStream.StreamRead和StreamWriter的使用 (转载) 创建一个新文件 Directory.CreateDirectory(@&quo ...

  4. 使用原生JS实现简单的ajax

    Ajax是一种使用javascript内置对象向服务器发送请求/接收响应的技术.它可以再页面已经完全显示出来之后再和服务器进行少量的数据交互,所以可以实现局部内容的刷新. ajax的实现,主要是靠ja ...

  5. 利用JavaScript实现文本框改文字功能

    <html> <head> <meta charset="utf-8"> <title>无标题文档</title> &l ...

  6. python3遍历选中文件夹下的文件【GUI编程】

    功能介绍 如标题 使用截图 1.第一步:运行python程序 2.第二步:点击按钮选中文件夹 3.运行结束: 1. 显示选中文件夹路径 2. 遍历打印文件夹内文件 代码 import os #程序功能 ...

  7. 使用PCL::GPU::遇到问题

    一:使用GPU进行点云分割,理论上可以极大地加快分割速度: 于是对PCL1.7.1进行了编译,回到32位系统,重设QT,编译成功(时间好漫长,一定要配置仔细,否则编译一次又一次浪费更多时间): 使用时 ...

  8. 05--C语言运算符优先级和ASCII码表

  9. 应用七:Vue之适配test环境变量(2.0版)

    在我们使用vue-cli创建的项目中,默认只有开发development和生产production两种环境变量:但在实际的项目开发过程中往往都会有测试环境,下面就来说一下如何适配测试环境test的环境 ...

  10. Sublime Text 3 Build 3047 安装/插件安装/C编程环境配置

    Sublime Text 3 Build 3047 安装 参考:http://sublimetext.iaixue.com/forum.php?mod=viewthread&tid=29 插件 ...