it-swarm.cn

Java-R集成?

我有一个Java应用程序需要执行偏最小二乘回归。看来PLSR没有Java实现。 Weka可能在某些时候有类似的东西,但它不再在API中。另一方面,我发现了一个很好的R实现,它有一个额外的好处。它被我想要复制的人使用,这意味着由于PLSR实现方式的不同,事情出错的可能性较小。

问题是:是否有足够好(且易于使用)的包使Java能够调用R,将一些参数传递给函数并读回结果?我的另一个选择是让Java在一个进程中生成R然后监视它。数据将被读取并写入磁盘。你会推荐哪两个?我错过了明显的第三种选择吗?

53
mbatchkarov

我过去成功使用了两种替代品。

_ jri _

  • 优点 :可能性能更好。
  • 缺点 :你必须配置一些环境变量和库,在Win/UNIX中是不同的。

RServe

  • 优点 :易于设置,您不需要初始化R或链接任何R库,可以在不同的机器上运行。
  • 缺点 :基于TCP/IP(服务器正在运行),没有来自R的回调。

其他替代方案 我从未使用过: RCaller

49
Guido

Duncan Temple Lang的工作: http://rss.acs.unt.edu/Rdoc/library/SJava/Docs/RFromJava.pdf

我对最强大的解决方案的猜测是 _ jgr _ 。 JGR的开发人员有一个邮件列表, Stats-Rosuda邮件列表Archive 表明该列表自2013年起仍然有效。

Googlecode上还有一些代码 ,这里有一个例子: http://stdioe.blogspot.com/2011/07/rcaller-20-calling-r-from-Java.html

10
42-

这是一个老问题..但对于浏览这里仍然感兴趣的人来说:我写了一篇博客文章,提供了如何使用JRI/rjava(基于JNI的桥)来做这类事情的详细示例(如何 - 专注于Linux开发环境)。我还通过调用R和类似的框架来比较和对比做出“mathy”事情的替代方法。

网址> http://buildlackey.com/integrating-r-and-Java-with-jrirjava-a-jni-based-bridge/

8
Chris Bedford

Renjin是一种替代方案,不仅可以集成许多R包,还可以通过对象轻松地在Java和R之间进行通信:

http://www.renjin.org/

6
juanmajmjr

JRI具有从Java调用R的低级和高级接口。有一个Eclipse插件可以帮助在 http://www.studytrails.com/RJava-Eclipse-Plugin/ 设置R Java环境。

3
user1569047

这似乎是一个老问题。但是 Rserve rJava 是将R与Java集成的两个好包。以下博客解释了这两个库的用法。

对于rJava: http://www.codophile.com/how-to-integrate-r-with-Java-using-rjava/

对于Rserve: http://www.codophile.com/how-to-integrate-r-with-Java-using-rserve/

我希望这将有所帮助。

3
Rajeev Singh

我有类似的需要一段时间后,测试了一些R的接口。我发现最适合我的需求(windows,c#)是 Rserve 我认为是用Java编写的。我唯一的抱怨是它不是64位。我使用了一个用c#编写的简单客户端,它运行得很好。我确信Java客户端好多了。

1
darckeen

FastR 是基于 GraalVM 的R实现。将它嵌入JVM应用程序就像这样简单:

Context ctx = Context.newBuilder("R").allowAllAccess(true).build();
ctx.eval("R", "sum").execute(new int[] {1,2,3});

本文中的更多详细信息: https://medium.com/graalvm/faster-r-with-fastr-4b8db0e0dceb

1
Steves