2013-07-25 59 views
1

我正在嘗試構建一個包含R代碼的java項目。主要邏輯背後是我想在同一個項目中自動化數據結構和數據分析。部分我能夠做到這一點。我將R連接到Java,並且我的R代碼運行良好。我在本地機器上完成了所有設置,並根據需要爲其提供所有輸出。由於數據集很大,我試圖在亞馬遜服務器上運行這個數據集。但是當我將它轉移到服務器時,我的項目無法正常工作。它無法執行library(XLConnect), library(rJava)。當我在我的java項目中調用這兩個庫時,它會崩潰。獨立的R代碼正在運行並給我輸出。我能爲此做什麼,以及如何解決這個錯誤。請幫我解決這個問題。Java和R集成


我的Java代碼是

import java.io.InputStreamReader; 
import java.io.Reader; 


public class TestRMain { 

    public static void main(String[] arg)throws Exception{ 

     ProcessBuilder broker = new ProcessBuilder("R.exe","--file=E:\\New\\Modified_Best_Config.R"); 
     Process runBroker = broker.start(); 

     Reader reader = new InputStreamReader(runBroker.getInputStream()); 
     int ch; 
     while((ch = reader.read())!= -1) 
      System.out.print((char)ch); 
     reader.close(); 

     runBroker.waitFor(); 

     System.out.println("Execution complete"); 

    } 
} 

而在Modified_Best_Config.R我寫這些代碼

library('ClustOfVar'); 
library("doBy"); 
library(XLConnect) 
#library(rJava) 
#library(xlsx) 

path="E:/New/"; 


############Importing and reading the excel files into R############## 

Automated_R <- loadWorkbook("E:/New/Option_Mix_Calculation1.xlsx") 

sheet1 <- readWorksheet(Automated_R, sheet = "Current Output") 
sheet2 <- readWorksheet(Automated_R, sheet = "Actual Sales monthly") 
sheet3 <- readWorksheet(Automated_R, sheet = "Differences") 


#####################Importing raw Data############################### 

optionData<- read.csv(paste(path,"ModifiedStructureNewBestConfig1.csv",sep=""),head=TRUE,sep=","); 


nrow(optionData) 
optionDemand=sapply(split(optionData,optionData$Trim),trimSplit); 
optionDemand1=t(optionDemand[c(-1,-2),]); 
optionDemand1 

################Calculating the equipment Demand#################### 

optionDemand2<-t(optionDemand2[c(-1,0)]); 

Rownames <- as.data.frame(row.names(optionDemand2)) 

writeWorksheet(Automated_R,Rownames, sheet = "Current Output", startRow = 21, startCol = 1) 
writeWorksheet(Automated_R,optionDemand2, sheet = "Current Output", startRow = 21, startCol = 2) 
saveWorkbook(Automated_R) 

但Java是,這些行後停止工作。

library("doBy"); 

整套代碼在本地機器上運行良好。但是,無論何時我試圖在亞馬遜服務器上運行它都沒有運行。單獨在R中,此代碼在服務器上運行。我有更多的R代碼運行沒有任何錯誤。我能做些什麼,請幫助我。

+1

這聽起來像你可能沒有安裝在你的服務器實例上的那些軟件包,但你可以請嘗試發佈一些代碼來重現這個問題,以便其他人可以更巧妙地解決它? –

+0

這可能有助於:[在Ubuntu/EC2上安裝rJava和其他軟件包](http://support.rstudio.org/help/discussions/problems/749-installing-rjava-and-other-packages-on-ubuntu-ec2 ) – Ben

+0

你說「單獨在R這個代碼在服務器上運行。」您是使用RStudio服務器還是在終端上運行R直接在您遇到此問題的同一Amazon服務器上運行R? –

回答

1

感謝您使用一些示例代碼更新您的問題。我無法完全複製您的情況,因爲我目前不能立即訪問Amazon EC2,並且我不知道您使用的具體類型的實例。但是,這裏有幾個建議來解決你的問題,我有一個預感是由缺少的軟件包引起的。

1.儘量通過您的[R腳本

安裝問題的包在你的[R腳本的一開始,你嘗試加載任何包之前,插入以下內容:

install.packages(c("XLConnect", "rJava")) 

如果您的實例包含指定的CRAN鏡像(實質上是R將首先從其下載軟件包源代碼的在線存儲庫),則此應將安裝在相同的倉庫中,其中您的其他軟件包保存在您的服務器上。然後,libraryrequire應加載您的包。

(旁註:rJava實際上是XLConnect的依賴,所以它會自動加載無論如何,如果你只指定library(XLConnect)

2.如果以上不工作,嘗試通過命令行安裝包

這實際上是@Ben建議他的評論。或者,請參閱可能的this link,它處理與不同軟件包相似的問題。如果可以的話,在服務器端,我會嘗試進入以下三個命令:

sudo add-apt-repository ppa:marutter/rrutter 
sudo apt-get update 
sudo apt-get install r-cran-XLConnect 

在我的經驗,這是一個很好的去到回購的時候,我似乎無法找到一個包,我需要安裝。但是,您可能會也可能沒有權限在您的服務器實例上安裝軟件包。