【问题标题】:R output not appearing after calling sink()调用 sink() 后没有出现 R 输出
【发布时间】:2017-08-29 21:55:01
【问题描述】:

我有一组复杂的 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 控制台中看到输出?

【问题讨论】:

    标签: r rstudio


    【解决方案1】:

    当您最初表明您只想接收消息时,运行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 帮助文件的“警告”部分中(间接)引用的内容,其中包括以下注释:

    除非您了解源代码,否则不要接收消息流 实施它,因此会遇到陷阱。

    【讨论】:

    • 欣赏这种洞察力。但是,调用sink(type="message") 并不能解决问题。我的控制台中没有显示任何消息。
    • @YuChen 嗯。我想知道这是否是 RStudio 问题,或者是否还有其他一些您未在此处包含的细节。我刚刚添加到帖子中的输出是通过在基本 R for Windows GUI 中运行代码获得的...
    • @YuChen FWIW,我在(旧)版本的 RStudio(v.1.0.136)上也得到了相同的输出。
    • 搞定了。你从一开始就是对的。我有一个错字:sink(type="messages").
    • @YuChen 太好了。很好的收获。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-25
    • 1970-01-01
    相关资源
    最近更新 更多