2017-06-04 54 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