解惑rJava R与Java的高速通道
当前位置:以往代写 > 其他教程 >解惑rJava R与Java的高速通道
2019-06-14

解惑rJava R与Java的高速通道

解惑rJava R与Java的高速通道

R的极客抱负系列文章,涵盖了R的思想,利用,东西,创新等的一系列要点,以我小我私家的进修和体验去诠释R的强大。
R语言作为统计学一门语言,一直在小众规模闪耀着光线。直到大数据的发作,R语言酿成了一门炙手可热的数据阐明的利器。跟着越来越多的工程配景的人的插手,R语言的社区在迅速扩大生长。此刻已不只仅是统计规模,教诲,银行,电商,互联网….都在利用R语言。
要成为有抱负的极客,我们不能逗留在语法上,要把握安稳的数学,概率,统计常识,同时还要有创新精力,把R语言发挥到各个规模。让我们一起动起来吧,开始R的极客抱负。
关于作者:
    张丹(Conan), 措施员Java,R,PHP,Javascript    weibo:@Conan_Z    blog: http://blog.fens.me    email: [email protected]

解惑rJava R与Java的高速通道

媒介
Java语言在家产界恒久处于霸主职位,Java语法、JVM、JDK、Java开源库,在近10年获得了发作式的成长,险些包围了应用开拓的所有规模。
陪伴着Java的全规模成长,问题也随之而来了。语法越来越巨大,近似的项目越来越多,学好Java变得很难。对付没有IT配景的统计人员,学用Java
更是难于上青天。

R一直是统计圈内处于佼佼者的语言,语法简朴,进修曲线不太长也不太陡。假如能团结Java的通用性和R的专业性,碰撞出的火花,将会缤纷绚烂。

本文将先容R与Java毗连的高速通道,rJava通信方案。别的一篇文章先容的Rserve通信方案,请参考: Rserve与Java的跨平台通信

目次

  1. rJava先容
  2. rJava安装
  3. rJava实现R挪用Java
  4. rJava(JRI)实现Java挪用R (win7)
  5. rJava(JRI)实现Java挪用R (Ubuntu)

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
  • #p#分页标题#e#

    配置情况变量

    
    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编写措施
    rjava2

    
    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"

    rjava

    运行功效:

    
    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中的利用要领。

      关键字:

    在线提交作业