将REXP对象转换为双数组(Java / R)

时间:2011-09-19 13:26:46

标签: java r jri

我希望R生成普通数据,然后在Java中使用这些数据。我知道有一个函数可以将REXP对象转换为数组,但它似乎不起作用。这就是我所拥有的:

REXP x;
x = re.eval("rnorm(100,50,10)");
double[] test = x.asDoubleArray();
System.out.println(x);
System.out.println(test);

我已打印出两个以查看错误。结果如下:

[REAL* (61.739814266023316, 40.25177570831545, 36.09450830843867, 48.06821029847672,...etc)]
[D@61de33

问题是R如何将结果返回给java;它告诉java x是什么,如果它们是字符串,它会说[String *(.. whatever ......)]。我只想要括号中的内容。它返回的行也是一个字符串。

我将使用大数据,所以我希望它快。我曾尝试使用子集,提取括号中的内容,然后将它们解析为双精度,但必须有更好的解决方案。此外,这似乎不适用于超过100分的数据。

1 个答案:

答案 0 :(得分:1)

由于已经提到了这个问题,请在这里作为答案:

System.out.println(test);其中test double[]字面意思是System.out.println(test.toString());

问题是,在Java中,数组的toString()实现很差。因此,为了获得所需的结果,您需要使用

REXP x;
x = re.eval("rnorm(100,50,10)");
double[] test = x.asDoubleArray();
System.out.println(x);
System.out.println(Arrays.asList(test)); // note we get an array-backed list here

因为列表具有正确的toString()方法。

再次,我为明显的答案道歉。