在Java中运行R脚本

6
我在尝试从Java Netbeans在Mac OS上运行R脚本时遇到了问题。我在网上寻找了解决方法,但是没有任何有效的方法解决我的问题。
我已经尝试使用Rserve和Runtime.getRuntime().exec("Rscript myScript.R"),但两个方法都不能正常运行我的程序。
当我使用Rserve时,在R控制台上运行Rserve(args="--no-save"),在Java程序中运行Rconnection.eval("\myscript.R"),然后执行程序时,程序会一直运行而没有任何响应,也没有出现错误和停止。事实上,当我尝试执行更简单的R脚本,例如计算平均值或类似的操作时,它可以正常工作。但是,当我尝试将data.frame转换为xts/zoo时间序列或仅在我的脚本中首先加载xts/zoo库时,程序就不会停止运行并且不会有任何输出。
另一方面,当我像其他类似文章中那样尝试执行"Runtime.getRuntime().exec("Rscript myScript.R")"时,什么也不会发生。虽然程序似乎正在执行脚本,但它没有给我任何结果,至少停止运行了。可能是因为Mac OS的原因,我无法告诉Java Rscript或R.app的路径,我不是很确定。
非常感谢您能帮助我。
Javi.
文件代码如下:
public void Rconnection () {

RConnection c=new RConnection();
System.out.println("INFO : Trying to Connect to R");                          
c.parseAndEval("source(\"/scriptname.R\")");
System.out.println("Greeting from R:" + result.asString());
c.close();
}

以下是 R 代码:

EU.df <- read.csv("/myinput.csv",header=T)
EU.xts <- xts(EU.df[,2:5],seq(as.Date("1970-01-02"),len=nrow(EU.df),by="day"))
write.csv(EU.df, file = "/myoutputfile.csv",row.names=FALSE)

也许是因为R库出现了一些问题或者是由于MAC OS的原因。

我不知道RScript是什么,但我认为我们不再使用Runtime.getRuntime()了。我印象中我们已经转向使用ProcessBuilder。其次,你尝试过从命令行运行这个RScript吗?最后,由于我看不到你的代码,你是否同时读取了STDOUT和STDERR?可能是你的RScript出了一些问题,但你正在读取错误的输出流以便能够正确地查看它。 - CodeChimp
该死,看起来很糟糕!编辑你的问题并将代码放在那里。 - alex
我已经尝试通过 library(xts/zoo)c.eval("library(xts)") 在 R 脚本中调用库,但都没有起作用。 - JaviMartinez
你的意思是:“尽管停止运行,但没有给我任何结果。”。你的脚本编写了一个硬编码的csv文件。你试过看看它是否被创建了吗?! - Karl Forner
^ 而:问题究竟是什么?你得到了哪个错误? - David Merinos
1个回答

0

你试过使用JRI吗?它可能会“阻塞”,不像RServe,并且可以给你更好的提示信息。

例如:

REngine re = new JRIEngine(new String[] { "--no-save" }, new RCallback(), false);
re.parseAndEval("source(\"/scriptname.R\")");
re.close();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接