用Java调用R - 比RCaller更快的替代方案

5
我尝试使用RCaller 2.0从Java调用R函数,经过几次尝试成功了。整合很容易,但是在运行时RCaller比较慢。我担心由于我需要重复调用相同的脚本数千次,并且由此引入的延迟对我的需求来说无法接受,所以RCaller 2.0不适合我的应用程序。
有没有更快的(就运行时间而言)从Java调用R脚本的替代方法?

我假设你已经了解rJava。有什么原因它不适合吗? - Ian Fellows
我从未将Java/R集成在一起,而RCaller 2.0似乎是最简单的解决方案。我听说过rJava和Rserve,你会推荐哪一个?还有关于Renjin的工作正在进行中,但可能还为时过早。 - Marsellus Wallace
4个回答

2

2

Rcaller在2.1版本中进行了多项性能改进。它现在支持使用单个R进程将命令传递给R,从而在循环中执行。也就是说,在初始化过程之后不再需要系统调用。


这个链接可以帮助更快地解决问题。 - jbytecode

1

有没有办法将一些迭代推到 R 中,这样你就不用经常调用它了?也许你可以传入一个数据数组和一个要运行的脚本数组,现在你是逐个传入它们。


这通常是在系统之间进行交互时采用的一种好方法,因为每次调用的成本往往比传输更多数据的成本高得多。 - obfuscation
@Ed:没错,但是我对 R 脚本没有完全的控制(而且我对 R 一无所知),所以这可能对我是个问题。此外,如果出现任何问题,我将失去对异常处理的完全控制权,这是有风险的。 - Marsellus Wallace
1
@Ed:嗯...这实际上是我的最终实现,它显著提高了总执行时间。在运行时,RCaller无法击败rJava和rServe,但其简单性在这次发挥了重要作用。Rnjine可能很快就成为前进的道路:http://stdioe.blogspot.com/2011/09/embedding-r-in-java-applications-using.html; - Marsellus Wallace

0

试试Renjin吧,至少看起来它很快!


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