是否可以使用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图形绘制。
这是可能的,如果是的话,是否有任何示例代码证明它?
答案 0 :(得分:1)
我可以看到实现这一点的最简单方法是让Java使用this simple method或these 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.