使用 JRI 从 Java 调用 R,如何转换返回值

发布于 2024-12-14 03:38:28 字数 702 浏览 0 评论 0原文

我正在使用 JRI 从 Java 执行一些 R 命令。我想在 Java 中使用 R 的结果进行进一步计算,但我不知道如何转换返回的对象。

Java 中的调用代码:

REXP x;
System.out.println(x = rengine.eval("source(\"/..../TS.R\")"));
System.out.println( x.asVector().elementAt(0));

R 代码的最后一行:

eq_all[length(eq_all)-1]

--

Java 控制台中的输出:

[VECTOR ([REAL* (3.050462038715372)], [BOOLi* ])]
[REAL* (3.050462038715372)]

“3.050462038715372”是正确的值,但如何在 Java 中访问它?

此致, 伊曼纽尔

PS.没有答案的相关问题: 将 REXP 对象转换为双精度数组 (Java/R)

I'm executing some R commands from Java using JRI.I want to use the results from R in my Java for further calculations but I have no idea how cast the returned object.

call code in Java:

REXP x;
System.out.println(x = rengine.eval("source(\"/..../TS.R\")"));
System.out.println( x.asVector().elementAt(0));

last line from R code:

eq_all[length(eq_all)-1]

--

output in Java console:

[VECTOR ([REAL* (3.050462038715372)], [BOOLi* ])]
[REAL* (3.050462038715372)]

"3.050462038715372" is the right value but how can I access it in Java?

best regards,
Immanuel

PS. related question without answer:
Converting REXP object to a double array (Java/R)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

花落人断肠 2024-12-21 03:38:28

我相信 asDouble()< /code>asDoubleArray() 就是您所需要的。

更新:所以在你的代码示例中,它应该是:

REXP x;
System.out.println(x = rengine.eval("source(\"/..../TS.R\")"));
System.out.println(x.asVector().elementAt(0).asDouble());

PS。提到的问题实际上已经有了您需要的答案——Java 数组中的 toString() 实现存在问题。

I believe asDouble() and asDoubleArray() are what you need.

Update: So on your code example, it should be:

REXP x;
System.out.println(x = rengine.eval("source(\"/..../TS.R\")"));
System.out.println(x.asVector().elementAt(0).asDouble());

PS. The referred question actually had the answer you needed—the problem there is with implementation of toString() in Java arrays.

层林尽染 2024-12-21 03:38:28

elementAt() 不起作用,您可以使用 at()。

REXP x;
System.out.println(x = rengine.eval("source(\"/..../TS.R\")"));
System.out.println(x.asVector().at(0).asDouble());

elementAt() is not working, your could use at().

REXP x;
System.out.println(x = rengine.eval("source(\"/..../TS.R\")"));
System.out.println(x.asVector().at(0).asDouble());
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文