成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

解惑rJava R與Java的高速通道

大數據
Java語言在工業界長期處于霸主地位,Java語法、JVM、JDK、Java開源庫,在近10年得到了爆發式的發展,幾乎覆蓋了應用開發的所有領域。伴隨著Java的全領域發展,問題也隨之而來了……

前言

Java語言在工業界長期處于霸主地位,Java語法、JVM、JDK、Java開源庫,在近10年得到了爆發式的發展,幾乎覆蓋了應用開發的所有領域。伴隨著Java的全領域發展,問題也隨之而來了。語法越來越復雜,近似的項目越來越多,學好Java變得很難。對于沒有IT背景的統計人員,學用Java更是難于上青天。

R一直是統計圈內處于佼佼者的語言,語法簡單,學習曲線不太長也不太陡。如果能結合Java的通用性和R的專業性,碰撞出的火花,將會繽紛絢爛。

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

rjava

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
  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環境  
  3. ~ sudo R CMD javareconf  
  4.  
  5. #啟動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實現R調用Java

在R環境中,使用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. #啟動JVM  
  11. > .jinit()  
  12.  
  13. #聲明并賦值到字符串  
  14. > s <- .jnew("java/lang/String""Hello World!")  
  15. > s  
  16. [1"Java-Object{Hello World!}" 
  17.  
  18. #查看字符串長度  
  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. #打印字符串對象  
  35. > print(s)  
  36. [1"Java-Object{Hello World!}" 
  37.  
  38. #打印字符串值  
  39. > .jstrVal(s)  
  40. [1"Hello World!" 

 

rJava優化過的方法調用,用$來調用方法

 

  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)實現Java調用R (win7)

在win7中安裝rJava

系統環境:

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

設置環境變量

 

  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調用Java變量測試  
  8. > s <- .jnew("java/lang/String""Hello World!")  
  9. > s  
  10. [1"Java-Object{Hello World!}" 

 

啟動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.         //循環打印數組  
  24.         double[] arr = re.eval("rnorm(10)").asDoubleArray();  
  25.         for (double a : arr) {  
  26.             System.out.print(a + ",");  
  27.         }  
  28.         re.end();  
  29.     }  

 

在Eclipse啟動設置VM參數:

 

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

 

rjava

運行結果:

 

  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環境,繼續測試。

5. rJava(JRI)實現Java調用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  

 

運行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 

 

運行結果

 

  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的互調。包括了R通過rJava調用Java,Java通過JRI調用R。并演示了win和linux中的使用方法。

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

 

責任編輯:林師授 來源: 張丹的博客
相關推薦

2009-12-10 11:04:08

Java模塊化OSGiJigsaw

2025-04-27 03:22:00

2011-03-18 14:38:25

云數據精細化流控

2024-03-14 08:36:25

MySQLzerofill?數字

2016-10-14 15:00:45

2017-07-11 16:45:51

Python整數比較

2017-09-12 15:56:43

邊緣計算云計算架構

2017-12-21 10:48:40

2009-07-20 10:36:29

什么是JDBC

2012-03-23 14:02:11

云計算

2011-03-22 09:43:06

J-Hi

2010-04-15 16:00:50

無線上網問題

2013-04-28 11:37:29

華為GSM-R通信網絡

2010-10-08 14:16:29

2019-04-02 10:50:05

框架Spring開發

2011-04-07 09:40:57

DataReader鏈接關閉

2019-03-25 20:46:22

混合IT云計算私有云

2010-04-07 11:09:53

2018-06-06 10:14:32

Kafka時間輪任務
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲欧美一区二区三区情侣bbw | 欧美三级在线 | 亚洲一区二区三区久久久 | 中文字幕不卡视频在线观看 | 一级毛片观看 | 香蕉婷婷| 久久久久久国模大尺度人体 | 国产激情精品一区二区三区 | 中文字幕视频在线 | 成人免费精品视频 | 一级片在线播放 | 日韩综合网 | 国产精品一区一区 | 国产亚洲精品综合一区 | 国产欧美精品 | 麻豆一区二区三区精品视频 | av一区二区在线观看 | 久久99精品视频 | 欧美日韩国产精品激情在线播放 | 亚洲视频三| 91免费在线 | 国产中文视频 | 日韩一区中文字幕 | 日韩在线免费看 | 日韩精品| 毛片.com | 国产一区二区在线观看视频 | 亚洲男人的天堂网站 | 国产午夜精品一区二区三区嫩草 | 国产精品毛片一区二区三区 | 岛国毛片 | 久久99精品国产自在现线小黄鸭 | 嫩草视频在线免费观看 | 亚洲黄色视屏 | 精品欧美色视频网站在线观看 | 成人精品视频免费 | 亚洲精品视频二区 | 精品欧美一区二区三区久久久 | 超碰导航 | 影音先锋成人资源 | 国产羞羞视频在线观看 |