调用sink()后R输出不出现

时间:2017-08-29 21:55:02

标签: r rstudio

我有一系列复杂的R脚本,并决定通过message()调用所有与调试相关的消息。我试图找到一种方法来抑制所有邮件,并偶然发现了SO post,建议我尝试使用sink()。所以我在我的脚本中插入了以下代码行,然后设置我的config$debug_mode <- FALSE

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

其他SO帖子和R文档说只需拨打sink()sink(file=NULL)即可停止之前的转移,但这对我不起作用。即使在致电sink()后,我也无法看到message()来电的R Studio控制台输出。另外,sink.number()会返回0,这似乎表明没有转移。那么,为什么我不再在R Studio控制台中看到输出?

1 个答案:

答案 0 :(得分:3)

如果您最初表示只想接收邮件,则运行sink()不会关闭该行为。相反,请使用sink(type="message"),这可以满足您的需求。

> 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

这可能是?sink帮助文件的“警告”部分中(倾斜地)引用的内容,其中包含此注释:

  

除非您了解源代码,否则不要接收消息流   实施它,从而陷入困境。