当我在python中导入R时,使用rpy2,如何禁止警告?
似乎在R中你必须做到以下几点
options(warn=-1)
...但我不熟悉R.如何在python中执行此操作?
你自己几乎给出了答案。您可以使用RPy从Python调用options(warn=-1)
函数:
rpy.r['options'](warn=-1)
对于RPy2,它应该是这样的(没试过这个):
rpy2.robjects.r['options'](warn=-1)
只需将它放在Python脚本的开头(在模块导入之后),并且应该抑制所有警告。
rpy2中的警告系统使用Python的warnings
模块。因此,您可以使用该软件包的filterwarnings()
函数关闭警告。正如在对此处的另一个答案的评论中已经指出的那样,这可能是危险的,因为不仅R相关的警告受到影响。
但是,rpy2带有自己的警告类RRuntimeWarning
。因此,您只能关闭此类警告
import warnings
from rpy2.rinterface import RRuntimeWarning
warnings.filterwarnings("ignore", category=RRuntimeWarning)
从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
类规范。