我尝试使用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?
提前致谢。
答案 0 :(得分:1)
例如: double doubleValue = 1.0; r.add(new REXPDouble(doubleValue));
应该有用。
如果您想了解更多信息,请访问此网页:http://icbtools.med.cornell.edu/javadocs/Rserve/org/rosuda/REngine/REXPDouble.html
答案 1 :(得分:0)
我也遇到了同样的问题,并找到了这个测试类:https://github.com/s-u/REngine/blob/master/Rserve/src/test/java/org/rosuda/rserve/RserveTest.java
它演示了如何将值传递给R,并从评估中检索结果。我发现这很有用,特别是在处理列表和向量时。