在 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()
可以为您完成。
我想在 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()
可以为您完成。