2010-04-27 145 views
58

我在尋找抑制輸出一個命令(在這種情況下,apply函數)。抑制一個命令的輸出R

是否可以在不使用sink()的情況下執行此操作?我已經在下面找到了所描述的解決方案,但是如果可能的話,希望在一行中完成。

How to suppress output

+1

你能解釋一下你的意思通過「做到這一點一致'?否則,你引用的問題已經提供了答案,這是重複的。 – 2010-04-27 16:33:19

+0

該解決方案需要三條線路,一條重定向輸出,命令,然後另一條輸出重新打開。 – Tor 2010-04-27 16:43:59

+0

這仍然是一個重複的問題。 – 2010-04-27 16:55:26

回答

67

你爲什麼要做到這一點沒有sink目前尚不清楚,但可以在invisible()功能包的任何命令,它會抑制輸出。例如:

1:10 # prints output 
invisible(1:10) # hides it 

否則,你總是可以結合東西放進一個行以分號和括號:

{ sink("/dev/null"); ....; sink(); } 
+4

嘗試'不可見(貓(「嗨\ n」))'''不可見()'只抑制表達式的打印,它不是'sink()'單行。 – 2010-04-27 16:51:02

+2

沒錯,但我認爲它符合提問者的需求,除非我在問題中丟失了某些東西...... – Shane 2010-04-27 16:57:37

+1

例如,根據以下問題抑制'apply'返回:'invisible(apply(矩陣(1:10),1,as.numeric))'。 – Shane 2010-04-27 17:03:45

9

[R僅自動打印未分配表達式的輸出,所以只分配的結果apply到一個變量,它不會被打印。

42

使用capture.output()函數。它非常像一次性的sink(),而不像invisible(),它可以抑制不僅僅是打印信息。將文件參數設置爲UNIX上的/dev/null或Windows上的NUL。例如,考慮德克的說明:

> invisible(cat("Hi\n")) 
Hi 

> capture.output(cat("Hi\n"), file='NUL') 
> 
+7

不起作用,如果你想應用這個函數返回一些值,你想使用這個值 – TMS 2013-08-01 08:17:25

+5

@TMS在過去幾個月有什麼變化嗎?我剛剛測試過使用函數返回的值,它的工作原理是:'capture.output(x < - log(2))',之後'x'的值爲'log(2)'... – drmariod 2015-09-08 12:35:33

5

您可以使用下面的'capture.output'。這使您可以使用以後數據:

log <- capture.output({ 
    test <- CensReg.SMN(cc=cc,x=x,y=y, nu=NULL, type="Normal") 
}) 

test$betas 
0
invisible(cat("Dataset: ", dataset, fill = TRUE)) 
invisible(cat(" Width: " ,width, fill = TRUE)) 
invisible(cat(" Bin1: " ,bin1interval, fill = TRUE)) 
invisible(cat(" Bin2: " ,bin2interval, fill = TRUE)) 
invisible(cat(" Bin3: " ,bin3interval, fill = TRUE)) 

在該行的結尾或下一行產生輸出,而不NULL

Dataset: 17 19 26 29 31 32 34 45 47 51 52 59 60 62 63 
Width: 15.33333 

Bin1: 17 32.33333 
Bin2: 32.33333 47.66667 
Bin3: 47.66667 63