rpy2:如何抑制 R 输出

rpy2: how to suppress R output

在 Python shell 中,当我发出以下命令时使用 rpy2

In [93]: x = robjects.r.bfast(data, h=0.1, season="none", max_iter=1)
[1]
 "No seasonal model will be fitted!"

我得到了这个不理想的输出

[1]
 "No seasonal model will be fitted!"

有什么办法可以抑制这个输出吗?我想将此调用包装到一个函数,然后包装到 api 调用。因此,将输出重定向到标准输出是不可取的。

也就是说,在rpy2中如何做:

sink("/dev/null")

有没有比

更好的方法
robjects.r('sink("/dev/null")')

?

显然,bfast 方法有条件地将该消息打印到控制台,没有包装器不打印,这是不可取的代码。通过拉取请求联系开发人员。

根据这个solution,考虑R的capture.output输出的returns个字符串。

...
from rpy2.robjects.packages import importr

utils = importr('utils')    
bfast = importr('bfast')

# NOTICE R's PERIODS CHANGED TO UNDERSCORE TO FIT PYTHON'S OBJECT MODEL
x = utils.capture_output(bfast(data, h=0.1, season="none", max_iter=1))