Search code examples
routput

Suppress automatic output to console in R


The function callmultmoments computes moments of the normal distribution. The function automatically prints "Sum of powers is odd. Moment is 0." if the sume of the powers is odd. Is there any way to supress that under the condition that the original function should stay untouched.

Ex:

require(symmoments)
# Compute the moment for the 4-dimensional moment c(1,1,3,4):

m.1134 <- callmultmoments(c(1,1,3,4))

EDIT:

As described here we can use

## Windows
sink("nul") 
...
sink()

## UNIX
sink("/dev/null")    # now suppresses
....                 # do stuff
sink()               # to undo prior suppression, back to normal now

However, I am writing a package so I want it to be platform independent. Any ideas what to do instead?


Solution

  • The issue is due to the fact that the function has multiple print statements, where stop, warning, or message would have been appropriate so that people can use suppressWarnings or suppressMessages.

    You can work arount it using invisible(capture.output()) around your whole assignment (not just the right side).

    f1 <- function(n, ...){
        print("Random print statement")
        cat("Random cat statement\n")
        rnorm(n = n, ...)
    }
    
    f1(2)
    #> [1] "Random print statement"
    #> Random cat statement
    #> [1] -0.1115004 -1.0830523
    invisible(capture.output(x <- f1(2)))
    x
    #> [1]  0.0464493 -0.1453540
    

    See also suppress messages displayed by "print" instead of "message" or "warning" in R.