在 rpy2 中使用 suppressMessages 仍然打印消息

Using suppressMessages in rpy2 still prints messages

我想在 rpy2 中抑制来自 R 的消息,并认为以下内容就足够了:

>>> from rpy2.robjects.packages import importr
>>> import rpy2.robjects as robjs

>>> suppmsg = robjs.r["suppressMessages"]

但后来我得到:

>>> suppmsg(robjs.r.message("hello"))
R[write to console]: hello

我不介意交互工作期间的消息,但我希望它们在图书馆中关闭。如何关闭它们?

您的代码可能不会按照您的预期执行,因为在 R 中,表达式的计算是惰性的,而在 Python 中则不是。

比如在R中做的时候

suppressMessages(library("foo"))

函数 suppressMessages() 是用 未计算的 表达式 library("foo") 作为参数调用的。函数体内suppressMessages()先是全局关闭消息显示的代码是运行,然后是表达式求值,最后是恢复消息显示的代码是运行 .

在Python,做

suppmsg(robjs.r.message("hello"))

将首先评估 robjs.r.message("hello")(它通过 rpy2 调用 R 函数函数 message())并且此评估的结果(函数返回的内容)作为suppmsg().

的参数

如果您只想停止导入库,函数 rpy2.robjects.packages.quiet_require() 可以为您完成。