【问题标题】:Java-R integration?Java-R 集成?
【发布时间】:2011-11-19 02:02:39
【问题描述】:

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

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

【问题讨论】:

标签: java r machine-learning regression


【解决方案1】:

我过去曾成功使用过两种替代方法。

JRI

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

RServe

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

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

【讨论】:

  • 看看这个:github.com/subes/invesdwin-context-r 它提供了一个简单的 Java API,有多种运行时实现可供选择。因此,您只需编写一次脚本,然后在运行时选择要使用的集成。正如 Guido 所说,每个人都有自己的优点/缺点。
【解决方案2】:

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

我猜测最可靠的解决方案是JGR。 JGR 的开发人员有一个邮件列表,Stats-Rosudamailing list Archive 表示该列表在 2013 年仍然有效。

There is also code that has been put up at Googlecode,这里有一个例子: http://stdioe.blogspot.com/2011/07/rcaller-20-calling-r-from-java.html

【讨论】:

  • JGR 是一个 GUI,如果我没记错的话,它在幕后使用了 JRI。
  • 我看到它被 JGR 的开发者描述为一种从 Java 调用 R 的方法
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

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

    http://www.renjin.org/

    【讨论】:

      【解决方案5】:

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

      【讨论】:

      • 我遵循了所有步骤,但无法执行最后一个:添加 JRI_DIR。根据一项建议“您实际上不必查看 JRI_DIR,您只需从 [rjava]/jri/ 添加 *.jar-s 就可以了”,但我无法做到。这是什么意思?
      【解决方案6】:

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

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

      预留:http://www.codophile.com/how-to-integrate-r-with-java-using-rserve/

      我希望这会有所帮助。

      【讨论】:

        【解决方案7】:

        不久前我也有类似的需求,并测试了一些 R 接口。我发现最适合我需求的接口(windows、c#)是Rserve,我相信它是用 Java 编写的。我唯一的抱怨是它不是 64 位的。我使用了一个用 c# 编写的简单客户端,它运行良好。我确信 Java 客户端要好得多。

        【讨论】:

          【解决方案8】:

          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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-12-04
            • 2017-06-19
            • 1970-01-01
            • 2020-04-13
            • 2020-04-23
            相关资源
            最近更新 更多