抑制rpy2中的警告

时间:2012-08-16 17:05:03

标签: python r warnings rpy2

当我在python中导入R时,使用rpy2,如何禁止警告?

看来在R中你只需要做以下

options(warn=-1)

...但我不熟悉R.如何在python中执行此操作?

3 个答案:

答案 0 :(得分:14)

rpy2中的警告系统使用Python的warnings模块。因此,您可以使用该程序包的filterwarnings()功能关闭警告。正如在对此处的另一个答案的评论中已经指出的那样,这可能是危险的,因为不仅R相关的警告会受到影响。

但是,rpy2带有自己的警告类RRuntimeWarning。因此,您只能通过

关闭此类警告
import warnings
from rpy2.rinterface import RRuntimeWarning
warnings.filterwarnings("ignore", category=RRuntimeWarning)

答案 1 :(得分:3)

你自己几乎给出了答案。您可以使用RPy调用Python中的options(warn=-1)函数:

rpy.r['options'](warn=-1)

对于RPy2,它应该是这样的(没试过这个):

rpy2.robjects.r['options'](warn=-1)

将它放在Python脚本的开头(模块导入之后),并且应该禁止所有警告。

答案 2 :(得分:0)

从3.0版本开始,rpy2不使用Python的warnings模块anymore。现在,它依赖于logging。新的解决方案将是:

from rpy2.rinterface_lib.callbacks import logger as rpy2_logger
import logging
rpy2_logger.setLevel(logging.ERROR)   # will display errors, but not warnings

如果只想过滤特定警告,请使用:

rpy2_logger.addFilter(lambda record: 'notch went outside hinges' in record.msg)

请参阅LogRecord类规范,以获取用于高级过滤的可用字段。