调用 sink() 后没有出现 R 输出

Yu *_*hen 3 r rstudio

我有一组复杂的 R 脚本,并决定将所有与调试相关的消息称为 via message()。我试图找到一种方法来抑制所有消息,并偶然发现了这篇SO post,它建议我尝试使用sink(). 因此,我将以下代码行插入到我的脚本中,并设置了我的config$debug_mode <- FALSE

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

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

Jos*_*ien 5

当您最初表示只想接收消息时,运行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
Run Code Online (Sandbox Code Playgroud)

这可能是?sink帮助文件的“警告”部分中(斜)引用的内容,其中包括以下说明:

除非您了解实现它的源代码并因此了解陷阱,否则不要沉没消息流。