2013-03-19 4 views
1

Когда я использую RStudio, я могу видеть любые ошибки или предупреждения при запуске функции.Ловушка R Ошибки в rpy2

Однако, когда я использую rpy2, как я могу уловить предупреждения (которые позволяют запускать код) и ошибки (которые останавливают код), чтобы я мог анализировать сообщения программно в python?

ответ

2

До R-3.0 (текущий неизданный) предупреждения по умолчанию были напечатаны на консоль. Из R-3-0 они больше не печатаются, потому что разработчики R сделали ранее использованную функцию C (и слишком заняты, чтобы документировать причину и сказать, можем ли мы получить доступ к этой функции обратно или нет).

Чтобы получить предупреждения как объект rpy2, вы можете сделать:

from rpy2.robjects.packages import importr 
base = importr('base') 
# do things that generate R warnings 
base.warnings() 

Ошибки, возникающие при оценке R код поднять rpy2.rinterface.RRuntimeError. Просто поймайте их.

+0

merci mille fois! – pythOnometrist

+0

@lgautier кажется, что не все ошибки R runtime генерируют '' rpy2.rinterface.RRuntimeError''s. Я получаю следующее '' '> Ошибка: inv_sympd(): матрица представляется сингулярным > Ошибка: Чхоль(): не сходится Terminate называется кинув экземпляр«станд :: runtime_error» > what(): chol(): не удалось сместить > Отменить (core dumped) '' ' , и это полностью исключает меня из Python. Обратите внимание, что R-код, который я запускаю, находится в блоке try/except. – DrMisha

+1

@DrMisha это старый ответ, но в любом случае ошибка, с которой вы, похоже, сталкиваетесь в R, связана с C++ (как видно из «std :: runtime_error») и не попадает в ловушку библиотеки R, которую вы используете. Когда это происходит, практически невозможно, чтобы 'rpy2' корректно обрабатывал ошибку, поскольку ошибка вызывает R [дамп ядра] (https://en.wikipedia.org/wiki/Core_dump). Надеюсь это поможет. – Stereo

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