2010-04-27 100 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