1

我正在尝试构建一个包含 R 代码的 java 项目。这背后的主要逻辑是我想在同一个项目中自动化数据结构和数据分析。部分我能够做到这一点。我将 R 连接到 Java 并且我的 R 代码运行良好。我在本地机器上完成了所有设置,并根据需要为我提供了所有输出。由于数据集很大,我试图在亚马逊服务器上运行它。但是当我将它转移到服务器时,我的项目无法正常工作。它无法执行library(XLConnect), library(rJava)。每当我在我的 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 代码正在运行而没有任何错误。我该怎么办,请帮帮我。

4

1 回答 1

1

感谢您使用一些示例代码更新您的问题。我无法完全复制您的情况,因为我目前无法立即访问 Amazon EC2,而且我不知道您正在使用的具体实例类型。但是这里有一些关于调试问题的建议,我有预感是由于缺少包引起的。

1. 尝试通过你的 R 脚本安装有问题的包

在您的 R 脚本的最开始,在您尝试加载任何包之前,插入以下内容:

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

如果您的实例包含指定的 CRAN 镜像(本质上是 R 将首先从其中下载包源代码的在线存储库),这应该将包安装在您的其他包保存在服务器上的同一存储库中。然后,要么libraryrequire应该加载你的包。

(旁注:rJava实际上是 的依赖项XLConnect,因此如果您只指定 ,它将自动加载library(XLConnect)

2.如果上述方法不起作用,请尝试通过命令行安装包

这基本上就是@Ben 在他的评论中所建议的。或者,请参阅此链接,它处理不同包的类似问题。如果可以,在服务器的终端中,我会尝试输入以下三个命令:

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

以我的经验,当我似乎找不到我需要安装的包时,这是一个很好的选择。但是您可能有权也可能没有在您的服务器实例上安装软件包的权限。

于 2013-07-25T17:37:50.957 回答