使用 R 扩展我的 Java 应用程序?
我正在构建一个应用程序,我想用做一些nr处理的模块进行扩展,我希望有R。使用 R 扩展 Java 应用程序的最佳选项是什么?
我正在构建一个应用程序,我想用做一些nr处理的模块进行扩展,我希望有R。使用 R 扩展 Java 应用程序的最佳选项是什么?
从Java与R的对话已经使用REngine API进行了标准化。基本上有两种实现。
第一个实现是 JRI。它基于 JNI,并在 JVM 中执行 R dll。这意味着连接非常快。您可以使用完整的 R 功能,包括位于 R 内部但在 Java 中可访问/可修改的对象。缺点是不能使用多线程。
第二个实现是 RServe。RServe 由一台用 C 语言编写的服务器和一个 Java 客户端组成。服务器从命令行启动,并包含 R dll。然后,Java 客户端建立套接字连接并以序列化方式调用 R。此实现效果很好。缺点是,在 Windows 上,RServe 组件无法自行分叉来处理多个连接。每个 RServe 实例只能为单个用户提供服务器。
另一个需要注意的实现是Java RMI客户端,它调用使用JRI调用R的Java服务器。这个想法是您可以使用多线程,因为您可以一次与多个服务器通信。查看 http://www.londonr.org/remoterengine-londonR.pdf
在实践中,我们将 RServe 与大量样板代码一起使用,用于启动和管理 RServe 实例。它基本上是一个主要的PITA,但它运行良好,性能良好。