加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 02:28:10 所属栏目:Java 来源:网络整理
导读:我希望R生成普通数据,然后在 Java中使用这些数据.我知道有一个函数可以将REXP对象转换为数组,但它似乎不起作用.这是我有的: REXP x;x = re.eval("rnorm(100,50,10)");double[] test = x.asDoubleArray();System.out.println(x);System.out.println(test);
我希望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点的数据.

解决方法

既然已经提到了这个问题,那就让我们回答一下:

的System.out.println(测试); test是double []字面意思是System.out.println(test.toString());

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

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

因为列表有适当的toString()方法.

再一次,我为一个明显的答案道歉.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读