8

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

看来,在 R 中,您只需执行以下操作

options(warn=-1)

...但我不熟悉 R。我如何在 python 中做到这一点?

4

3 回答 3

18

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

但是,rpy2 带有自己的警告类,RRuntimeWarning. 因此,您只能通过以下方式关闭此类警告

import warnings
from rpy2.rinterface import RRuntimeWarning
warnings.filterwarnings("ignore", category=RRuntimeWarning)
于 2017-01-09T17:26:17.183 回答
5

从 3.0 版本开始,rpy2 不再使用 Pythonwarnings模块。它现在改为依赖。新的解决方案是: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' not in record.msg)

有关高级过滤的可用字段,请参阅LogRecord类规范。

于 2019-03-30T22:55:56.377 回答
2

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

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

对于 RPy2 它应该是这样的(还没有尝试过):

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

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

于 2013-02-03T18:23:02.267 回答