2011-09-19 45 views
4

我希望R产生例如普通数据,然后在Java中使用这些数据。我知道有一个函数可以将一个REXP对象转换为一个数组,但似乎不起作用。这里是我有:将REXP对象转换为双数组(Java/R)

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)] 
[[email protected] 

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

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

+0

抱歉忽略此.......不注意 –

回答

1

既然已经有这个问题的参考,让这里成为一个答案:

System.out.println(test);其中testdouble[]字面意思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()方法。

再次,我很抱歉有一个明显的答案。