【问题标题】:How to add double elements to RList?如何将双元素添加到 RList?
【发布时间】:2013-07-31 13:21:58
【问题描述】:

我尝试使用 Java 代码通过 Rserve 调用 R。我想使用 REXPGenericVector 来存储数组并将其传递给 R:

RList r = new RList();
r.add(new Double(1.0));
REXPGenericVector v = new REXPGenericVector(r);

// make a new local connection on default port (6311)
RConnection c = new RConnection();
// assign data to variable x
c.assign("x",v);

System.out.println("Printing out v:"+v);

但是,c.assign("x",v); 会显示一条错误消息:

java.lang.ClassCastException: java.lang.Double cannot be cast to org.rosuda.REngine.REXP
at org.rosuda.REngine.RList.at(RList.java:103)
at org.rosuda.REngine.Rserve.protocol.REXPFactory.getBinaryLength(REXPFactory.java:489)
at org.rosuda.REngine.Rserve.RConnection.assign(RConnection.java:272)
at com.xypress.Test.main(Test.java:29)

如何将双精度或字符串或其他类型的数据添加到 RList?

提前致谢。

【问题讨论】:

  • 我没有使用 rserve 的经验,但根据文档,看起来你做的一切都是正确的。要么我遗漏了一些东西,要么问题比发布的代码更多......再次,我不熟悉这个库,但我唯一能想到的是无论出于何种原因,REXPGenericVector 不起作用(正如预期的那样,Double)。也许您应该尝试另一个REXP

标签: java r rserve


【解决方案1】:

我跑进了同一个陷阱! 试试 REXPDouble 类,而不是 Double。

例如: 双双值 = 1.0; r.add(new REXPDouble(doubleValue));

应该可以的。

如果您想了解更多信息,请查看此网页:http://icbtools.med.cornell.edu/javadocs/Rserve/org/rosuda/REngine/REXPDouble.html

【讨论】:

    【解决方案2】:

    我也遇到了同样的问题,发现了这个测试类:https://github.com/s-u/REngine/blob/master/Rserve/src/test/java/org/rosuda/rserve/RserveTest.java

    它演示了如何将值传递给 R,并从评估中取回结果。我发现这很有帮助,特别是在处理列表和向量时。

    【讨论】:

      猜你喜欢
      • 2017-02-25
      • 2013-12-25
      • 1970-01-01
      • 2011-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多