用于交换数据的Java / R接口(JRI)代码(例如,PDF值)

时间:2012-03-05 03:56:17

标签: java r jri

是否可以使用Java程序的输入在R中进行一些简单的计算,并获得对该Java程序的响应?

Java和R之间这种数据交换的典型例子是计算数字数组(比如Java double[]数组)的概率分布函数(PDF)。

在Java类中,数组应该通过Java / R接口(JRI)传递给R,并且计算结果不应该是图形图(就像JRI在JFrame中那样),而是另一个数组可以从同一Java类中检索的值(或类似的Java数据结构),以便进一步处理。

JRI分配部分看起来像这样:

Rengine re=new Rengine(new String [] {"--vanilla"}, false, null);

if (!re.waitForR())
{
    System.out.println ("Cannot load R");
    return;
}

double[] values = ... // The data values

re.assign("data", values);

所以,问题是上面的data数组是否可以在R中处理(如PDF所示),结果返回到调用Java类,而不是由R图形绘制。

这是可能的,如果是的话,是否有任何示例代码证明它?

1 个答案:

答案 0 :(得分:1)

我可以看到实现这一点的最简单方法是让Java使用this simple methodthese more careful methods等方法运行R. R将输出发送到stdout,可以在Java中拾取和解析。

请参阅R中的?Rscript以查看要从Java运行的系统调用的格式。

一个更健壮的方法(我使用的方法)通过使用Java(或您正在使用的任何其他程序)将R命令和数据保存到一个或多个文本文件(可能是一个脚本.R和一个或更多data1.tab文件),在R脚本文件中调用R读取,在R中将结果保存到文本文件,然后让Java(或其他)读取结果并清理。当然,这里的缺点是速度。如果你可以让内联方法(stdin / stdout)为你工作,它将会快得多。

虽然这并没有指向JRI,但是用Java(或其他)编写一些函数会很容易,这些函数为任意R代码和自动生成的Java向量/矩阵集合提供了这样的接口。使用为R函数?dump指定的格式在脚本中传递给R.