在R中,某些功能可以打印信息和返回值,打印是否可以静音?
例如:
print.and.return <- function() {
print("foo")
return("bar")
}
返回
> print.and.return()
[1] "foo"
[1] "bar"
>
我可以将退货存储起来:
> z <- print.and.return()
[1] "foo"
> z
[1] "bar"
>
我可以取消"foo"
的打印吗?
答案 0 :(得分:9)
?capture.output
答案 1 :(得分:8)
您可以使用R的隐藏功能特性,例如通过定义函数
deprintize<-function(f){
return(function(...) {capture.output(w<-f(...));return(w);});
}
将“打印”功能转换为“静音”功能:
noisyf<-function(x){
print("BOO!");
sin(x);
}
noisyf(7)
deprintize(noisyf)(7)
deprintize(noisyf)->silentf;silentf(7)
答案 2 :(得分:3)
如果您在自己的功能中绝对需要打印的副作用,为什么不选择它呢?
print.and.return <- function(..., verbose=TRUE) {
if (verbose)
print("foo")
return("bar")
}
> print.and.return()
[1] "foo"
[1] "bar"
> print.and.return(verbose=FALSE)
[1] "bar"
>
答案 3 :(得分:3)
我同意hadley和mbq的建议capture.output
作为最通用的解决方案。对于您编写的函数的特殊情况(即您控制内容的函数),请使用message
而不是print
。这样您就可以使用suppressMessages
来抑制输出。
print.and.return2 <- function() {
message("foo")
return("bar")
}
# Compare:
print.and.return2()
suppressMessages(print.and.return2())
答案 4 :(得分:1)
我知道我可能会复活这篇文章,但其他人可能会像我一样找到它。我对我的一个函数中的相同行为感兴趣,我只是遇到了“隐形”:
它与return()
具有相同的用法,但它不会打印返回的值:
invisible(variable)
因此,对于@ayman给出的例子:
print.and.return2 <- function() {
message("foo")
invisible("bar")
}
干杯