Java 和 R 集成

标签 java eclipse r eclipse-juno

我正在尝试构建一个包含 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 代码正在运行,没有任何错误。我该怎么办,请帮帮我。

最佳答案

感谢您使用一些示例代码更新您的问题。我无法完全复制您的情况,因为我目前无法立即访问 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

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

关于Java 和 R 集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17850425/

相关文章:

r - 对列的子集执行 dplyr mutate

java - Activity 堆栈问题

java - 将值传递给 LoginModule 中的 shareState 参数

java - 如何使用Java提交post请求?

android - 数组整数逻辑

r - 数据帧中列的 AES 256 加密

r - 确定向量中仅出现一次的元素的索引

java - 如何从 Java 类进行 SOAP Web 服务调用?

java - 在 eclipse 插件中获取两个 IFile 之间的差异

java - 自动更新JTable