2017-06-04 55 views
0

在Python外壳,并使用rpy2当我发出以下命令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调用。因此,输出重定向到stdout是不期望的。

换句话说,如何在rpy2做:

sink("/dev/null") 

难道还有比

robjects.r('sink("/dev/null")') 

更好的办法?

回答

0

显然,bfast方法有条件地将该消息打印到控制台,没有包装程序不打印,这是不可取的代码。伸手就拉要求开发商。

每本solution,考虑基础R的capture.output返回输出字符串。

... 
from rpy2.robjects.packages import importr 

base = importr('base')  
bfast = importr('bfast') 

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

感谢@Parfait,但为什么这比'robisms.r('sink(“/ dev/null”)')更好,因为我不关心'print'输出? – iamsterdam

+0

ř文档使用比喻'capture.output()'是'沉()''作为与()'是'附上()'。我的猜测是,这些比较的前者不会影响全球环境,因为后者可以做但限于特定的呼叫线路,所以前后的线路不受影响。 – Parfait