使用 R 扩展我的 Java 应用程序?

2022-09-04 20:03:25

我正在构建一个应用程序,我想用做一些nr处理的模块进行扩展,我希望有R。使用 R 扩展 Java 应用程序的最佳选项是什么?


答案 1

您可以使用 JRI。从该网站:

JRI 是一个 Java/R 接口,它允许将 R 作为单个线程在 Java 应用程序中运行。基本上,它将R动态库加载到Java中,并提供Java API到R的功能。它支持对 R 函数的简单调用和完全运行的 REPL。

这是rJava项目的一部分(允许从R调用Java)


答案 2

从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,但它运行良好,性能良好。


推荐