用R编写脚本扩展我的Java应用程序? 3 周 Questions & Answers 3975 我正在构建一个应用程序,我想用模块来扩展它,它可以进行一些nr运算,我想用R来实现这一点。使用R扩展Java应用程序的最佳选项是什么
# 1 楼答案 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
# 2 楼答案 使用REngine API对Java中的R进行了标准化。基本上有两种实现 第一个实现是JRI。它基于JNI,并在JVM内执行R dll。这意味着连接非常快。您可以使用完整的R功能,包括位于R中但在Java中可以访问/修改的对象。缺点是不能使用多线程 第二个实现是RServe。RServe由一个用C编写的服务器和一个Java客户端组成。服务器从命令行启动,并包含R dll。然后,java客户端进行套接字连接,并以串行方式调用R。这个实现运行良好。缺点是,在Windows上,RServe组件无法自行分叉来处理多个连接。每个RServe实例只能为一个用户提供服务器 另一种需要注意的实现是Java RMI客户端,它使用JRI调用Java服务器调用R。其思想是,您可以使用多线程,因为您可以同时与多个服务器进行通信。见http://www.londonr.org/remoterengine-londonR.pdf 在实践中,我们将RServe与许多样板代码一起用于启动和管理RServe实例。这基本上是一个主要的PITA,但它工作得很好,性能也很好
# 1 楼答案
FastR是基于GraalVM的R实现。将其嵌入JVM应用程序非常简单:
本文将提供更多详细信息:https://medium.com/graalvm/faster-r-with-fastr-4b8db0e0dceb
# 2 楼答案
使用REngine API对Java中的R进行了标准化。基本上有两种实现
第一个实现是JRI。它基于JNI,并在JVM内执行R dll。这意味着连接非常快。您可以使用完整的R功能,包括位于R中但在Java中可以访问/修改的对象。缺点是不能使用多线程
第二个实现是RServe。RServe由一个用C编写的服务器和一个Java客户端组成。服务器从命令行启动,并包含R dll。然后,java客户端进行套接字连接,并以串行方式调用R。这个实现运行良好。缺点是,在Windows上,RServe组件无法自行分叉来处理多个连接。每个RServe实例只能为一个用户提供服务器
另一种需要注意的实现是Java RMI客户端,它使用JRI调用Java服务器调用R。其思想是,您可以使用多线程,因为您可以同时与多个服务器进行通信。见http://www.londonr.org/remoterengine-londonR.pdf
在实践中,我们将RServe与许多样板代码一起用于启动和管理RServe实例。这基本上是一个主要的PITA,但它工作得很好,性能也很好