欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java調(diào)用R語(yǔ)言實(shí)例講解

 更新時(shí)間:2021年03月16日 09:41:34   作者:水木山川  
這篇文章主要介紹了Java調(diào)用R語(yǔ)言實(shí)例講解,文中代碼講解的很清晰,有需要的同學(xué)可以研究下

R是統(tǒng)計(jì)計(jì)算的強(qiáng)大工具,JAVA是做應(yīng)用系統(tǒng)的主流語(yǔ)言。JAVA負(fù)責(zé)系統(tǒng)的構(gòu)建,R用來(lái)做運(yùn)算引擎,從而實(shí)現(xiàn)應(yīng)用型和分析性相結(jié)合的系統(tǒng)。

一、Rserve(遠(yuǎn)程通信模式)

Rserve是一個(gè)基于TCP/IP的服務(wù)器,通過(guò)二進(jìn)制協(xié)議傳輸數(shù)據(jù),可以提供遠(yuǎn)程連接,使得客戶端語(yǔ)言能夠調(diào)用R。
Rserve作為一個(gè)package發(fā)布在CRAN上,可以直接使用install.packages("Rserve")進(jìn)行安裝。需要使用時(shí)在R控制臺(tái)下加載該包,然后輸入命令Rserve(),開(kāi)啟服務(wù)器就可以供客戶端調(diào)用。首先建立一個(gè)新的連接,然后就可以使用eval之類的方法將R中的表達(dá)式傳到服務(wù)器端,通過(guò)R求值后傳回JAVA中REXP類型的變量,然后打印出來(lái),整個(gè)過(guò)程非常簡(jiǎn)單。由于不需要對(duì)R進(jìn)行初始化,因此速度會(huì)比較快。在其他系統(tǒng)下可以同時(shí)建立多個(gè)連接,但是在Windows下只允許同時(shí)打開(kāi)一個(gè)連接,后續(xù)的連接都會(huì)共有相同的命名空間?!?/p>

1、Rserve安裝和啟動(dòng)(windows環(huán)境)

方法一:前提:安裝并配置了R語(yǔ)言

第一次啟動(dòng)安裝Rserve包:
install.packages("Rserve")

第一次啟動(dòng)加載Rserve包:
library(Rserve)

啟動(dòng)Rserve服務(wù):
Rserve()

關(guān)閉Rconnection連接:
關(guān)閉Rconnection連接用rc.close();

方法二:點(diǎn)擊R工具欄上的“程序包”--》“設(shè)定CRAN鏡像”--》China(xxx) —》確定

點(diǎn)擊【程序包】—》安裝程序包—》選擇 rJava —>OK
點(diǎn)擊【程序包】—》安裝程序包—》選擇 Rserve —>OK

點(diǎn)擊【程序包】—》加載程序包—》選擇 rJava —>OK
點(diǎn)擊【程序包】—》加載程序包—》選擇 Rserve —>OK

安裝命令:install.packages("packageName")
加載命令:library(packageName)

啟動(dòng)命令:Rserve()

2.Java調(diào)用R

基本方法:
Rconnection:連接R服務(wù)
eval():執(zhí)行R語(yǔ)句
assgin():聲明變量
REXP
asInteger(), asIntegers(), asString(), asDouble(), asDoubles(), asList()獲取相應(yīng)類型的數(shù)據(jù)

引用R架包或者添加maven配置:

<!--REngine Java Interface to R -->
<dependency>
 <groupId>org.rosuda.REngine</groupId>
 <artifactId>REngine</artifactId>
 <version>2.1.0</version>
</dependency>
<dependency>
 <groupId>org.rosuda.REngine</groupId>
 <artifactId>Rserve</artifactId>
 <version>1.8.1</version>
</dependency>

實(shí)例1:求一個(gè)數(shù)組里面的最大值

//建立連接
RConnection rc=new RConnection();
//構(gòu)建數(shù)據(jù)
int[] datas={314,451,56,24,631};
//聲明變量,相當(dāng)于在R命令行中輸入data<-datas命令
rc.assign("data",datas);
//執(zhí)行R語(yǔ)句,相當(dāng)于在R命令行中輸max(data)命令
REXP rexp=rc.eval("max(data)");
//REXP. asXxx()返回相應(yīng)類型的數(shù)據(jù),如果結(jié)果類型不符會(huì)出錯(cuò)
System.out.println(rexp.asInteger());
rc.close();

實(shí)例2:調(diào)用自定義函數(shù)

創(chuàng)建R文件test.R
myFunc<-function(data){
x<-data+2;
}
RConnection rc = new RConnection();
// test.R的路徑
String fileName = "D:\\test.R";
rc.assign("fileName", fileName);
//執(zhí)行test.R腳本,執(zhí)行這一步才能調(diào)用里面的自定義函數(shù)myFunc,如果不行,就在R工具上也執(zhí)行一下test.R腳本
rc.eval("source(fileName)");
String num = "3";
//調(diào)用myFunc函數(shù)
REXP rexp=rc.eval("myFunc("+num+")");
//返回類型是一個(gè)整數(shù)類型,所以用asInteger
System.out.println(rexp.asInteger());
rc.close();

在R-x.x.x\library\Rserve\client\java\Rserve\test目錄下有測(cè)試用例可以參考。(StartRserve.java是用java啟動(dòng)Rserve服務(wù),而不用打開(kāi)R語(yǔ)言來(lái)手動(dòng)啟動(dòng)。test.java里包含了基本方法的調(diào)試)

二、JRI(嵌入式模式)

JRI,全名是Java/R Interface,是通過(guò)調(diào)用R的動(dòng)態(tài)鏈接庫(kù)從而利用R中的函數(shù)等。通過(guò)install.packages("rJava")安裝rJava就行,在安裝文件夾中,可以看到一個(gè)jri的子文件夾,里面有自帶的例子可以用來(lái)測(cè)試。
配置環(huán)境變量:在PATH中添加%R_HOME%/bin和%R_HOME%/library/rJava/jri,注意R_HOME的路徑要正確。
安裝rJava
install.packages("rJava")
設(shè)置環(huán)境變量:PATH后添加 %R_HOME%\library\rJava\jri
獲取jar包:把安裝目錄jri文件夾下的JRI.jar、REngine.jar和JRIEngine.jar放進(jìn)Java工程添加到工程中?!  ?/p>

兩種方式優(yōu)缺點(diǎn)比較:

JRI(嵌入式模式)我體會(huì)到最大的優(yōu)點(diǎn)是它對(duì)中文的支持較好,但是使用JRI模式下很容易造成整個(gè)系統(tǒng)的崩潰,比如在java調(diào)用R的時(shí)候,中間出現(xiàn)了異?;蛘咤e(cuò)誤,這些錯(cuò)誤大致都是致命的,導(dǎo)致java虛擬機(jī)崩潰,從而導(dǎo)致整個(gè)系統(tǒng)崩潰
Rserve(遠(yuǎn)程通信模式) 在這種通信模式下,最大的優(yōu)點(diǎn)是javaWeb項(xiàng)目不需要去維護(hù)R的運(yùn)行,通過(guò)TCP/IP協(xié)議直接進(jìn)行通訊,但是有一個(gè)很大的缺點(diǎn)是它對(duì)中文的支持很弱,尤其是在windows的環(huán)境中?;臼遣恢С种形牡模趌inux環(huán)境下,似乎對(duì)中文的支持稍微好些。不是完全支持中文的話,對(duì)返回有中文或者輸入有中文的系統(tǒng)將是不可用的。

到此這篇關(guān)于Java調(diào)用R語(yǔ)言實(shí)例講解的文章就介紹到這了,更多相關(guān)Java調(diào)用R語(yǔ)言內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論