【问题标题】:Call R from Java using JRI, how to cast return value使用 JRI 从 Java 调用 R,如何转换返回值
【发布时间】:2011-11-06 19:07:25
【问题描述】:

我正在使用 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。没有答案的相关问题: Converting REXP object to a double array (Java/R)

【问题讨论】:

    标签: java r jri rjava


    【解决方案1】:

    我相信asDouble()asDoubleArray() 是您所需要的。

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

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

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

    【讨论】:

    • 感谢您的输入,但我已经尝试过 ' System.out.println( x.asDouble()); System.out.println(x.asDoubleArray());'给我'0.0'和'null'
    • 我没有"source(\"/..../TS.R\")"——因此无法检查您的代码。请给sscce.org好吗?
    • x.asDouble()) 不起作用,因为 x 不是标量。查看更新。
    • 我需要重新考虑一下,因为依赖关系,sscce并不是那么容易。我感觉我的 R 数据类型可能是问题所在。
    • 先检查更新;很可能你还没有问题:)
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2012-05-07
      • 2015-11-18
      • 2011-12-12
      • 2015-03-16
      • 1970-01-01
      • 1970-01-01
      • 2012-03-19
      • 1970-01-01
      • 2018-01-17
      相关资源
      最近更新 更多