提问人:Tor 提问时间:4/28/2010 最后编辑:HenrikTor 更新时间:6/12/2023 访问量:143637
禁止函数的输出
Suppress output of a function
答:
目前尚不清楚为什么要在没有 的情况下执行此操作,但您可以将任何命令包装在函数中,它将抑制输出。例如:sink
invisible()
1:10 # prints output
invisible(1:10) # hides it
否则,您始终可以使用分号和括号将内容组合成一行:
{ sink("/dev/null"); ....; sink(); }
评论
invisible()
sink()
apply
invisible(apply(matrix(1:10), 1, as.numeric))
{ sink("/dev/null"); ....; sink(); }
capture.output
capture.output
idw
sink
R 只自动打印未赋值表达式的输出,因此只需将 的结果赋给变量,它就不会被打印出来。apply
评论
print()
cat()
使用该函数。它的工作方式非常像一次性的,与 不同的是,它可以抑制的不仅仅是打印消息。将参数设置为 在 UNIX 或 Windows 上,或者更好地使用 (>= 3.6.0) 来实现平台独立性。如果需要支持 R< 3.6,请使用 .例如,考虑 Dirk 的注释:capture.output()
sink()
invisible()
file
"/dev/null"
"NUL"
nullfile()
R.utils::nullfile()
> invisible(cat("Hi\n"))
Hi
> capture.output(cat("Hi\n"), file = nullfile())
>
评论
capture.output(x <- log(2))
x
log(2)
nullfile()
suppressMessages
您可以使用“capture.output”,如下所示。这允许您稍后使用数据:
log <- capture.output({
test <- CensReg.SMN(cc=cc,x=x,y=y, nu=NULL, type="Normal")
})
test$betas
评论
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
以下函数应完全执行所需的操作:
hush=function(code){
sink("NUL") # use /dev/null in UNIX
tmp = code
sink()
return(tmp)
}
例如,使用此处的函数:
foo=function(){
print("BAR!")
return(42)
}
运行
x = hush(foo())
将 42 分配给 x,但不会将“BAR!”打印到 STDOUT
请注意,在 UNIX 操作系统中,您需要将“NUL”替换为“/dev/null”
评论
suppressMessages()
如果有人来到这里寻找适用于 RMarkdown 的解决方案,这将抑制所有输出:
```{r error=FALSE, warning=FALSE, message=FALSE}
invisible({capture.output({
# Your code goes here
2 * 2
# etc
# etc
})})
```
代码将运行,但输出不会打印到 HTML 文档
将 Hadley 的评论作为答案:使用包可以在不打印的情况下使用 apply familyplyr
x <- 1:2
lapply(x, function(x) x + 1)
#> [[1]]
#> [1] 2
#>
#> [[2]]
#> [1] 3
plyr::l_ply(x, function(x) x + 1)
下面是一个版本,它对要关闭的代码中的错误很可靠:
quietly <- function(x) {
sink("/dev/null") # on Windows (?) instead use `sink("NUL")`
tryCatch(suppressMessages(x), finally = sink())
}
- 这是直接基于公认的答案,谢谢。
- 但是,如果静默的代码中发生错误,它可以避免使输出静音。
评论
sink
sink
sink
如果你想知道如何抑制一个,你可以这样使用:warning()
suppressWarnings()
suppressWarnings(warning("hi"))
而这两个仍将显示警告:
invisible(warning("Hi"))
# shows 'Hi'
capture.output(warning("Hi"), file='NUL')
# shows 'Hi'
对于 R 函数中的 return(something) 部分:
return(invisible(something))
工作正常
invisible(return(something))
根本不起作用
评论
capture.output
*_ply
lapply
plyr