Вызов R из Java с использованием JRI, как привести возвращаемое значение - PullRequest
1 голос
/ 06 ноября 2011

Я выполняю некоторые команды R из Java с использованием JRI. Я хочу использовать результаты из R в моей Java для дальнейших вычислений, но я не знаю, как привести возвращенный объект.

код вызова в 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. связанный вопрос без ответа: Преобразование объекта REXP в двойной массив (Java / R)

Ответы [ 2 ]

0 голосов
/ 29 июля 2014

elementAt () не работает, вы можете использовать at ().

REXP x;
System.out.println(x = rengine.eval("source(\"/..../TS.R\")"));
System.out.println(x.asVector().at(0).asDouble());
0 голосов
/ 06 ноября 2011

Я считаю, asDouble() и asDoubleArray() - это то, что вам нужно.

Обновление: Итак, в вашем примере кода это должно быть:

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

PS. На указанный вопрос действительно был ответ, который вам нужен - проблема с реализацией toString() в массивах Java.

...