自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

解惑rJava R與Java的高速通道

大數(shù)據(jù)
Java語(yǔ)言在工業(yè)界長(zhǎng)期處于霸主地位,Java語(yǔ)法、JVM、JDK、Java開源庫(kù),在近10年得到了爆發(fā)式的發(fā)展,幾乎覆蓋了應(yīng)用開發(fā)的所有領(lǐng)域。伴隨著Java的全領(lǐng)域發(fā)展,問題也隨之而來了……

前言

Java語(yǔ)言在工業(yè)界長(zhǎng)期處于霸主地位,Java語(yǔ)法、JVM、JDK、Java開源庫(kù),在近10年得到了爆發(fā)式的發(fā)展,幾乎覆蓋了應(yīng)用開發(fā)的所有領(lǐng)域。伴隨著Java的全領(lǐng)域發(fā)展,問題也隨之而來了。語(yǔ)法越來越復(fù)雜,近似的項(xiàng)目越來越多,學(xué)好Java變得很難。對(duì)于沒有IT背景的統(tǒng)計(jì)人員,學(xué)用Java更是難于上青天。

R一直是統(tǒng)計(jì)圈內(nèi)處于佼佼者的語(yǔ)言,語(yǔ)法簡(jiǎn)單,學(xué)習(xí)曲線不太長(zhǎng)也不太陡。如果能結(jié)合Java的通用性和R的專業(yè)性,碰撞出的火花,將會(huì)繽紛絢爛。

本文將介紹R與Java連接的高速通道,rJava通信方案。另外一篇文章介紹的Rserve通信方案,請(qǐng)參考: Rserve與Java的跨平臺(tái)通信

rjava

1. rJava介紹

rJava是一個(gè)R語(yǔ)言和Java語(yǔ)言的通信接口,通過底層JNI實(shí)現(xiàn)調(diào)用,允許在R中直接調(diào)用Java的對(duì)象和方法。

rJava還提供了Java調(diào)用R的功能,是通過JRI(Java/R Interface)實(shí)現(xiàn)的。JRI現(xiàn)在已經(jīng)被嵌入到rJava的包中,我們也可以單獨(dú)試用這個(gè)功能?,F(xiàn)在rJava包,已經(jīng)成為很多基于Java開發(fā)R包的基礎(chǔ)功能組件。

正式由于rJava是底層接口,并使用JNI作為接口調(diào)用,所以效率非常高。在JRI的方案中,JVM直接通過內(nèi)存直接加載RVM,調(diào)用過程性能幾乎無(wú)損耗,因此是非常高效連接通道,是R和Java通信的***開發(fā)包。

2. rJava安裝

系統(tǒng)環(huán)境:

  • Linux Ubuntu 12.04.2 LTS 64bit server
  • R version 3.0.1 64bit
  • Java (Oracle SUN) 1.6.0_29 64bit Server VM
  1. ~ uname -a  
  2. 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  
  3.  
  4. ~ cat /etc/issue  
  5. Ubuntu 12.04.2 LTS \n \l  
  6.  
  7. ~ R --version  
  8. R version 3.0.1 (2013-05-16) -- "Good Sport" 
  9. Copyright (C) 2013 The R Foundation for Statistical Computing  
  10. Platform: x86_64-pc-linux-gnu (64-bit)  
  11.  
  12. R is free software and comes with ABSOLUTELY NO WARRANTY.  
  13. You are welcome to redistribute it under the terms of the  
  14. GNU General Public License versions 2 or 3.  
  15. For more information about these matters see  
  16.  
  17. http://www.gnu.org/licenses/.  
  18.  
  19. ~ java -version  
  20. java version "1.6.0_29" 
  21. Java(TM) SE Runtime Environment (build 1.6.0_29-b11)  
  22. Java HotSpot(TM) 64-Bit Server VM (build 20.4-b02, mixed mode) 

rJava安裝

 

  1.  
  2. #配置rJava環(huán)境  
  3. ~ sudo R CMD javareconf  
  4.  
  5. #啟動(dòng)R  
  6. ~ sudo R  
  7. > install.packages("rJava")  
  8. installing via 'install.libs.R' to /usr/local/lib/R/site-library/rJava  
  9. ** R  
  10. ** inst  
  11. ** preparing package for lazy loading  
  12. ** help  
  13. *** installing help indices  
  14. ** building package indices  
  15. ** testing if installed package can be loaded  
  16. * DONE (rJava)  
  17.  
  18. The downloaded source packages are in  
  19.         ‘/tmp/RtmpiZyCE7/downloaded_packages’  

 

3. rJava實(shí)現(xiàn)R調(diào)用Java

在R環(huán)境中,使用rJava包編程

 

  1.  
  2. #加載rJava包  
  3. > library(rJava)  
  4. > search()  
  5.  [1".GlobalEnv"        "package:rJava"     "package:stats" 
  6.  [4"package:graphics"  "package:grDevices" "package:utils" 
  7.  [7"package:datasets"  "package:methods"   "Autoloads" 
  8. [10"package:base" 
  9.  
  10. #啟動(dòng)JVM  
  11. > .jinit()  
  12.  
  13. #聲明并賦值到字符串  
  14. > s <- .jnew("java/lang/String""Hello World!")  
  15. > s  
  16. [1"Java-Object{Hello World!}" 
  17.  
  18. #查看字符串長(zhǎng)度  
  19. > .jcall(s,"I","length")  
  20. [112 
  21.  
  22. #索引World的位置  
  23. > .jcall(s,"I","indexOf","World")  
  24. [16 
  25.  
  26. #查看concat的方法聲明  
  27. > .jmethods(s,"concat")  
  28. [1"public java.lang.String java.lang.String.concat(java.lang.String)" 
  29.  
  30. #使用concat方法連接字符串  
  31. > .jcall(s,"Ljava/lang/String;","concat",s)  
  32. [1"Hello World!Hello World!" 
  33.  
  34. #打印字符串對(duì)象  
  35. > print(s)  
  36. [1"Java-Object{Hello World!}" 
  37.  
  38. #打印字符串值  
  39. > .jstrVal(s)  
  40. [1"Hello World!" 

 

rJava優(yōu)化過的方法調(diào)用,用$來調(diào)用方法

 

  1.  
  2. #同.jcall(s,"I","length")  
  3. > s$length()  
  4. [112 
  5.  
  6. #同.jcall(s,"I","indexOf","World")  
  7. > s$indexOf("World")  
  8. [16 

 

#p#

4. rJava(JRI)實(shí)現(xiàn)Java調(diào)用R (win7)

在win7中安裝rJava

系統(tǒng)環(huán)境:

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

設(shè)置環(huán)境變量

 

  1.  
  2. PATH: C:\Program Files\R\R-3.0.1\bin\x64;D:\toolkit\java\jdk6\bin;;D:\toolkit\java\jdk6\jre\bin\server  
  3. JAVA_HOME: D:\toolkit\java\jdk6  
  4. CLASSPATH: C:\Program Files\R\R-3.0.1\library\rJava\jri  

 

在R中安裝rJava

 

  1. > install.packages("rJava")  
  2.  
  3. #加載rJava  
  4. > library(rJava)  
  5. > .jinit()  
  6.  
  7. #R調(diào)用Java變量測(cè)試  
  8. > s <- .jnew("java/lang/String""Hello World!")  
  9. > s  
  10. [1"Java-Object{Hello World!}" 

 

啟動(dòng)Eclipse編寫程序

rjava2

 

  1. package org.conan.r.rjava;  
  2.  
  3. import org.rosuda.JRI.Rengine;  
  4.  
  5. public class DemoRJava {  
  6.  
  7.     public static void main(String[] args) {  
  8.         DemoRJava demo = new DemoRJava();  
  9.         demo.callRJava();  
  10.     }  
  11.  
  12.     public void callRJava() {  
  13.         Rengine re = new Rengine(new String[] { "--vanilla" }, falsenull);  
  14.         if (!re.waitForR()) {  
  15.             System.out.println("Cannot load R");  
  16.             return;  
  17.         }  
  18.           
  19.         //打印變量  
  20.         String version = re.eval("R.version.string").asString();  
  21.         System.out.println(version);  
  22.  
  23.         //循環(huán)打印數(shù)組  
  24.         double[] arr = re.eval("rnorm(10)").asDoubleArray();  
  25.         for (double a : arr) {  
  26.             System.out.print(a + ",");  
  27.         }  
  28.         re.end();  
  29.     }  

 

在Eclipse啟動(dòng)設(shè)置VM參數(shù):

 

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

 

rjava

運(yùn)行結(jié)果:

 

  1. R version 3.0.1 (2013-05-16)  
  2. 0.04051018703700011,-0.3321596519938258,0.45642459001166913,-1.1907153494936031,1.5872266854172385,1.3639721994863943,-0.6309712627586983,-1.5226698569087498,-1.0416402147174952,0.4864034017637044

 

打包DemoRJava.jar

在Eclipse中完成打包,上傳到linux環(huán)境,繼續(xù)測(cè)試。

5. rJava(JRI)實(shí)現(xiàn)Java調(diào)用R (Ubuntu)

新建目錄DemoRJava,上傳DemoRJava.jar到DemoRJava

 

  1. ~ mkdir /home/conan/R/DemoRJava  
  2. ~ cd /home/conan/R/DemoRJava  
  3. ~ ls -l  
  4. -rw-r--r-- 1 conan conan 1328 Aug  8  2013 DemoRJava.jar  

 

運(yùn)行Jar包

 

  1. ~ export R_HOME=/usr/lib/R  
  2. ~ 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 

 

運(yùn)行結(jié)果

 

  1. R version 3.0.1 (2013-05-16)  
  2. 0.6374494596732511,1.3413824702002808,0.04573045670001342,-0.6885617932810327,0.14970067632722675,-0.3989493870007832,-0.6148250252955993,0.40132038323714453,-0.5385260423222166,0.3459850956295771

 

我們完成了,R和Java的互調(diào)。包括了R通過rJava調(diào)用Java,Java通過JRI調(diào)用R。并演示了win和linux中的使用方法。

本文出自:http://blog.fens.me/r-rjava-java/

 

責(zé)任編輯:林師授 來源: 張丹的博客
相關(guān)推薦

2009-12-10 11:04:08

Java模塊化OSGiJigsaw

2025-04-27 03:22:00

2011-03-18 14:38:25

云數(shù)據(jù)精細(xì)化流控

2024-03-14 08:36:25

MySQLzerofill?數(shù)字

2016-10-14 15:00:45

2017-07-11 16:45:51

Python整數(shù)比較

2017-09-12 15:56:43

邊緣計(jì)算云計(jì)算架構(gòu)

2017-12-21 10:48:40

2009-07-20 10:36:29

什么是JDBC

2011-03-22 09:43:06

J-Hi

2012-03-23 14:02:11

云計(jì)算

2010-04-15 16:00:50

無(wú)線上網(wǎng)問題

2013-04-28 11:37:29

華為GSM-R通信網(wǎng)絡(luò)

2010-10-08 14:16:29

2011-04-07 09:40:57

DataReader鏈接關(guān)閉

2019-04-02 10:50:05

框架Spring開發(fā)

2017-05-18 13:45:20

2021-08-25 22:40:09

數(shù)據(jù)中心IT通道

2024-04-29 09:02:46

Vue頁(yè)面動(dòng)畫樣式
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)