Yu Chen
Yu Chen

Reputation: 7440

R output not appearing after calling sink()

I have a collection of complicated R scripts, and decided to have all my debug-related messages called via message(). I was trying to find a way to suppress all messages, and stumbled upon this SO post, which recommended I try using sink(). So I inserted the following lines of code into my script, and set my config$debug_mode <- FALSE:

if (!config$debug_mode){
  messages <- file("messages.Rout", open = "wt")
  sink(messages, type = "message")
}

The other SO post and R documentation says to simply call sink() or sink(file=NULL) to stop the previous diversion, but this is not working for me. Even after calling sink(), I don't see the R Studio console output from my message() calls. Also, sink.number() returns 0, which seems to suggest that there are no diversions in place. Why, then, am I no longer seeing output in my R Studio console?

Upvotes: 4

Views: 3028

Answers (1)

Josh O&#39;Brien
Josh O&#39;Brien

Reputation: 162311

When you've initially indicated that you want to sink only messages, running sink() does not turn that behavior off. Instead, use sink(type="message"), which does what you're wanting.

> config <- list()
> config$debug_mode <- FALSE
> if (!config$debug_mode){
+   messages <- file("messages.Rout", open = "wt")
+   sink(messages, type = "message")
+ }
> message("trial")
> sink(type="message")
> message("trial")
trial

This is likely what is being (obliquely) referenced in the "Warning" section of the ?sink help file, which includes this note:

Do not sink the messages stream unless you understand the source code implementing it and hence the pitfalls.

Upvotes: 7

Related Questions