【问题标题】:suppress warnings in rpy2抑制 rpy2 中的警告
【发布时间】:2012-08-13 02:18:32
【问题描述】:

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

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

options(warn=-1)

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

【问题讨论】:

  • 这些警告是在开始导入 R 包之后出现的,还是在常规会话期间发出的(例如,对于某些 R 表达式)?
  • 后者,它们是由我正在调用的一些函数生成的。
  • suppressWarnings() 可能是一个选择。

标签: python r warnings rpy2


【解决方案1】:

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

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

import warnings
from rpy2.rinterface import RRuntimeWarning
warnings.filterwarnings("ignore", category=RRuntimeWarning)

【讨论】:

  • 这应该是公认的答案,因为它是“抑制 R 中的警告”的解决方案。接受的解决方案不起作用。
【解决方案2】:

从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' not in record.msg)

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

【讨论】:

    【解决方案3】:

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

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

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

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

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

    【讨论】:

    • 似乎不适用于 rpy2。显然可以通过:import warnings warnings.filterwarnings("ignore") 来粗暴地抑制,这一点都不优雅,因为它不仅影响 rpy2 警告
    猜你喜欢
    • 2023-03-22
    • 1970-01-01
    • 2011-03-31
    • 2019-10-22
    • 2014-12-19
    • 2021-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多