How to hide or disable in-function printed message

25,764

Solution 1

You can use capture.output with invisible

> invisible(capture.output(y <- ff(2)))
> y
[1] 4

or sink

> sink("file")
> y <- ff(2)
> sink()
> y
[1] 4

Solution 2

Here's a nice function for suppressing output from cat() by Hadley Wickham:

quiet <- function(x) { 
  sink(tempfile()) 
  on.exit(sink()) 
  invisible(force(x)) 
} 

Use it like this:

y <- quiet(ff(5))

Source: http://r.789695.n4.nabble.com/Suppressing-output-e-g-from-cat-td859876.html

Solution 3

You should also check out purrr::quietly().

ff <- function(x) {
  cat(x, "\n")
  x^2
}

purrr::quietly(ff)(7)$result
#> [1] 49

Created on 2020-09-10 by the reprex package (v0.3.0)

Share:
25,764
David Z
Author by

David Z

Updated on February 11, 2022

Comments

  • David Z
    David Z over 2 years

    Suppose I have a function such as:

    ff <- function(x) {
      cat(x, "\n")
      x^2}
    

    And run it by:

    y <- ff(5)
    # 5 
    y
    # [1] 25
    

    My question is how to disable or hide the 5 printed from cat(x, "\n") such as:

    y <- ff(5)
    y
    # [1] 25