2013-07-31 2 views
1

Я попытался вызвать R Rserve с помощью Java-кода. Я хотел использовать REXPGenericVector для хранения и передать массив R:Как добавить двойные элементы в RList?

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

У меня нет опыта работы с 'rserve', но, основываясь на документации, похоже, что вы все делаете правильно. Либо я что-то пропустил, либо проблема с чем-то больше, чем опубликованный код ... Опять же, я не знаком с этой библиотекой, но единственное, что я могу придумать, это то, что по какой-то причине «REXPGenericVector» не работает (как и ожидалось с «Двойным»). Возможно, вам стоит попробовать еще один «REXP»? –

ответ

0

Я тоже столкнулся с той же проблемой, и нашел этот тестовый класс: https://github.com/s-u/REngine/blob/master/Rserve/src/test/java/org/rosuda/rserve/RserveTest.java

Он демонстрирует, как передавать значения R и получить результаты от оценки. Я нашел это полезным, особенно при работе со списками и векторами.