Python rpy2:如何抑制R输出
在pythonshell中,并在发出以下命令时使用rpy2Python rpy2:如何抑制R输出,python,r,rpy2,Python,R,Rpy2,在pythonshell中,并在发出以下命令时使用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调用。因此,将输出重定向到标准输
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")')
?显然,该方法有条件地将该消息打印到控制台,而没有不打印的包装,这是不可取的代码。在拉取请求时与开发人员联系
在此,考虑R的<代码>捕获。输出< /COD>返回输出字符串。
...
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))
谢谢@Parfait,但是为什么这比做
robjects.r('sink(/dev/null'))
要好呢?因为我不关心打印
输出?r docs使用的类比是capture.output()
是sink()
和with()
是attach()
。我的猜测是,这些比较中的前一个不会像后一个那样影响全局环境,但仅限于特定的调用行,因此前后的行不会受到影响。我得到一个错误:module'base'没有属性“capture\u output”
@eotp,实际上来自utils not base包(都是R标准库的一部分)。请参见编辑。@冻糕谢谢!