【问题标题】:Integrate R in java web application在 Java Web 应用程序中集成 R
【发布时间】:2014-12-04 13:34:54
【问题描述】:

我知道有多个类似这个问题的问题,但其中大多数都是 >2 岁,实际上并没有那么相关。

我需要做的是将 R 环境完全集成到现有的 java(实际上是 scala)应用程序中。我不想要任何基于 R 的 Web 解决方案,如 Rook、Rapache 等,服务器逻辑严格发生在 Java 领域。我需要一种将 R 命令发送到解释器,让它运行它们并处理输出的方法。更重要的是,我需要能够:

  1. 交互式地运行命令,不仅是现成的 R 脚本。

  2. 从已建立的图形包中生成和处理图形。

  3. 在 JVM 和 R 解释器之间来回传递原始数据。

    我知道JRI。我非常感谢任何使用过它的人的来信。它有多稳定?该项目的积极维护程度如何?我可以查看任何现有代码吗?还有其他选择吗?

【问题讨论】:

  • 尽管您的问题超出了“如何在 Java 中集成 R”,但它有助于链接一些相关问题[1][2][3]
  • 嗯,其实是3个问题。我很想知道是否/如何处理上述第 2 点。

标签: java r scala


【解决方案1】:

要从 Java 本地调用 R,您需要 JRI。要远程调用 Java,您可以使用 RServe。如果你想处理图形,最好使用 R 中的一些东西来完成,比如评估包。 Afaik 大多数语言桥都没有提供处理图形的特定功能,您需要在 R 级别上执行此操作。

在您开始了解使用跨语言桥梁进行科学计算的挑战和限制之前,请先查看this paper。以后你会省去很多麻烦。

【讨论】:

  • 非常感谢您的回答。我不会将问题标记为尚未回答,以查看是否可以在此处收集一些类似有用且最新的答案以供参考。非常感谢。
【解决方案2】:

您还可以考虑 FastR,这是一个基于 GraalVM 的 R 实现。这是来自 Swing 应用程序的屏幕截图,显示了来自 R 的 lattice 图。

FastR 可以像这样嵌入:

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

您可以指示 R 脚本绘制到给定的Graphics2D 对象:

ctx.eval("R", "function(g) awt(g, 400, 400)").execute(myGraphics2DObject)
ctx.eval("R", "grid.points(1:10)")

完整示例在 GitHub 上:https://github.com/graalvm/examples/tree/master/fastr_javaui

更多关于 FastR 的信息:https://medium.com/graalvm/faster-r-with-fastr-4b8db0e0dceb

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-07
    • 1970-01-01
    • 2023-03-23
    • 2011-07-25
    • 2014-08-02
    • 1970-01-01
    • 2011-12-20
    • 2014-06-20
    相关资源
    最近更新 更多