R中的print()命令可以安静吗?

时间:2010-09-10 01:21:41

标签: r printing

在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"的打印吗?

5 个答案:

答案 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")
}

干杯