2017-02-20 10 views
0

Я использую JRI для выполнения ряда вычислений с использованием двигателя R. Как было отмечено в различных обучающих программ, там в Интернете, я использую eval method в Rengine class, например:JRI: получить сообщения об ошибках от двигателя R

engine.eval("meanVal=mean(rVector)");

В какой-то момент метод eval начинается возвращение NULL, который, согласно документации, означает, что «что-то пошло не так ». Однако я не могу идентифицировать в классе Rengine свойство или метод, который предоставил бы сообщение об ошибке, состояние ошибки или вывод R-консоли для определения причины. Есть ли способ получить подробную информацию о том, что может произойти?

ответ

0

На самом деле удивительно сложно получить информацию об ошибках от R при ее встраивании. Однако он предоставляет дополнительную информацию на уровне R. Поэтому самый простой способ, чтобы обернуть свой код в

try(..., silent=TRUE) 

или

tryCatch(..., error=function(e) e) 

таким образом, что вы получаете ошибки обратно в Java с помощью регулярной оценки. Если вы хотите получить действительно фантазию, вы можете использовать Rserve::Rserve.eval(), который также может возвращать трассировки стека по ошибкам, но для этого потребуется последняя версия пакета Rserve от http://rforge.net/Rserve

+0

Этот код не является Java, но в любом случае является «движком». Метод eval() 'не выдаёт исключений. Как я писал в вопросе, единственным ключом к проблеме является этот метод, возвращающий 'NULL'. –

+0

Именно поэтому я указывал, что вы хотите поймать его на стороне R - см. Выше - как вы не можете на стороне Java, так как R не даст вам этого, если вы не спросите. –

+0

Теперь я понимаю, что это должен быть код, переданный 'engine.eval()', который должен быть обернут; вы можете отредактировать ответ, чтобы сделать его более понятным. В любом случае, я получаю '[NULL]' вместо просто 'NULL'. –

 Смежные вопросы

  • Нет связанных вопросов^_^