Can the print() command in R be quieted?

后端 未结 5 1959
故里飘歌
故里飘歌 2021-02-14 04:58

In R some functions can print information and return values, can the print be silenced?

For example:

print.and.return <- function() {
  print(\"foo\         


        
相关标签:
5条回答
  • 2021-02-14 05:21

    You may use hidden functional nature of R, for instance by defining function

    deprintize<-function(f){
     return(function(...) {capture.output(w<-f(...));return(w);});
    }
    

    that will convert 'printing' functions to 'silent' ones:

    noisyf<-function(x){
     print("BOO!");
     sin(x);
    }
    
    noisyf(7)
    deprintize(noisyf)(7)
    deprintize(noisyf)->silentf;silentf(7)
    
    0 讨论(0)
  • 2021-02-14 05:24
    ?capture.output
    
    0 讨论(0)
  • 2021-02-14 05:29

    I know that I might be resurrecting this post but someone else might find it as I did. I was interested in the same behaviour in one of my functions and I just came across "invisibility":

    It has the same use of return() but it just don't print the value returned:

    invisible(variable)
    

    Thus, for the example given by @ayman:

    print.and.return2 <- function() {
      message("foo")
      invisible("bar")
    }
    
    0 讨论(0)
  • 2021-02-14 05:42

    If you absolutely need the side effect of printing in your own functions, why not make it an option?

    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"
    > 
    
    0 讨论(0)
  • 2021-02-14 05:42

    I agree with hadley and mbq's suggestion of capture.output as the most general solution. For the special case of functions that you write (i.e., ones where you control the content), use message rather than print. That way you can suppress the output with suppressMessages.

    print.and.return2 <- function() {
      message("foo")
      return("bar")
    }
    
    # Compare:
    print.and.return2()
    suppressMessages(print.and.return2())
    
    0 讨论(0)
提交回复
热议问题