1

我尝试使用 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?

提前致谢。

4

2 回答 2

1

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

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

那应该工作。

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

于 2014-03-25T16:11:32.310 回答
0

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

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

于 2017-10-17T11:13:22.310 回答