2013-07-25 57 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 

在我的经验,这是一个很好的去到回购的时候,我似乎无法找到一个包,我需要安装。但是,您可能会也可能没有权限在您的服务器实例上安装软件包。