来自Java内部的R.

从Java中调用Rfunction的最佳方法是什么?

我正在寻找一种快速,简单和可靠的方法,使用我的Java应用程序在R中制作标准的2d散点图和直方图。 我想知道在快速谷歌搜索中出现的哪些软件包/接口最方便使用。

我期待着您的建议!

使用JRI: http ://www.rforge.net/JRI/。 它与rJava捆绑在一起,包括一些使用示例。

一个非常简单的例子是这样的:

import java.io.*; import java.awt.Frame; import java.util.Enumeration; import org.rosuda.JRI.Rengine; import org.rosuda.JRI.REXP; import org.rosuda.JRI.RVector; import org.rosuda.JRI.RMainLoopCallbacks; public class rJavaTest { public static void main(String[] args) { Rengine re=new Rengine(args, false, new TextConsole()); REXP x; re.eval("print(1:10/3)"); System.out.println(x=re.eval("iris")); RVector v = x.asVector(); if (v.getNames()!=null) { System.out.println("has names:"); for (Enumeration e = v.getNames().elements() ; e.hasMoreElements() ;) { System.out.println(e.nextElement()); } } if (true) { System.out.println("Now the console is yours ... have fun"); re.startMainLoop(); } else { re.end(); System.out.println("end"); } } } 

有一些叫做http://www.renjin.org/的新东西

我喜欢JRI一件事是部署,虽然jri要求你的应用程序用户将下载R,但renjin不会,并且它只使用JVM来运行。

我发现将R分支为进程,附加到进程的stdin,stdout和stderr流,并通过输入流发送R命令非常有效。 我使用文件系统在R和我的Java进程之间进行通信。 这样,我可以在Java中从不同的线程运行多个R进程,它们的环境不会相互冲突。

R与Java的包或库

从Java调用R.

  • RCaller
  • Rserve
  • JRI
  • Rsession
  • 韧劲

从R调用Java

  • rJava