抑制rpy2中的警告

Ric*_*son 6 python warnings r rpy2

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

似乎在R中你必须做到以下几点

options(warn=-1)
Run Code Online (Sandbox Code Playgroud)

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

app*_*oup 16

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

但是,rpy2带有自己的警告类RRuntimeWarning.因此,您只能关闭此类警告

import warnings
from rpy2.rinterface import RRuntimeWarning
warnings.filterwarnings("ignore", category=RRuntimeWarning)
Run Code Online (Sandbox Code Playgroud)


kra*_*ski 5

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

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

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

rpy2_logger.addFilter(lambda record: 'notch went outside hinges' not in record.msg)
Run Code Online (Sandbox Code Playgroud)

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


Ser*_*ano 2

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

rpy.r['options'](warn=-1)
Run Code Online (Sandbox Code Playgroud)

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

rpy2.robjects.r['options'](warn=-1)
Run Code Online (Sandbox Code Playgroud)

只需将其放在 Python 脚本的开头(在模块导入之后),所有警告都会被抑制。

  • 似乎不适用于 rpy2。显然,可以通过以下方式粗暴地抑制:`import warnings warnings.filterwarnings("ignore")`,这一点也不优雅,因为它不仅影响 rpy2 警告 (2认同)