java - 将 REXP 对象转换为 double 组 (Java/R)

标签 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..)]。我只想要括号中的内容。无论如何,它返回的行也是一个字符串。

我将处理大量数据,因此我希望它能够快速处理。我曾尝试使用子集,提取括号中的内容,然后将它们解析为 double ,但必须有更好的解决方案。此外,这似乎不适用于超过 100 个点的数据。

最佳答案

既然已经有对这个问题的引用,那么这里是一个答案:

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() 方法。

再一次,对于一个显而易见的答案,我深表歉意。

关于java - 将 REXP 对象转换为 double 组 (Java/R),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7471689/

相关文章:

java.lang.NullPointerException 在 android.support.v4.view.ViewCompatHC.setAlpha(ViewCompatHC.java :101)

r - 是否可以排除使用 sf 和 tmap 制作的 map 区域?

r - Ubuntu 上的 JRI fatal error

java - 通过 JRI 从 Java 在 R 中创建 data.frames

java - 如何从java执行R脚本文件

java - 如何在 url 重定向时将路径连接到基本 url?

java - Hibernate 查询结果无法转换为 List<Subject>

windows-10 - 无法在 IntelliJ IDEA 中找到或加载主类来制作 Javafx jar

r - 垂直合并 2 个变量 R tidyverse

r - 机器特定的慢 read_excel 读取时间