【问题标题】:Wrapper/adverb to suppress messages in R包装器/副词以抑制 R 中的消息
【发布时间】:2021-04-17 00:19:01
【问题描述】:

许多 tidyverse 函数的消息非常冗长,导致日志中充满了类似

New names:
* `` -> ...1
* `` -> ...2
* `` -> ...3
* `` -> ...4
* `` -> ...5

重复了无数次。这使得查看实际警告消息变得非常困难。

是否有一个插入式 (a) 包装函数可以抑制从其中运行的代码生成的消息,或者 (b) 一个副词将函数变成不生成消息的函数?我希望一旦我的代码稳定并且我不需要查看来自特别冗长的行的所有消息,我可以对其进行简单的修改。 purrr::quietly 几乎是我想要的,但是因为它将原始输出作为列表的一部分返回,所以它并不是真正的直接替换或包装未修改的代码行。

【问题讨论】:

  • 收到这些警告/消息是有原因的。您应该找到并修复它们,而不是压制它们。
  • 嗨@RonakShah,谢谢你的建议。我确实相信修复警告通常比抑制警告更好。但是一些包作者相信非常冗长的消息行为,其中函数报告它们正在做什么,这可能会使消息流充满杂乱无章 - 特别是当所述函数是重复数百次的管道的一部分时。我希望能够在我选择时让这些函数安静下来,正是以便我可以注意代码中其他地方出现的重要警告。

标签: r


【解决方案1】:

suppressMessages() 可以满足您的需求。

a <- data.frame(a=1,a=2, check.names = FALSE)

tibble::as_tibble(a, .name_repair = "universal")
#> New names:
#> * a -> a...1
#> * a -> a...2
#> # A tibble: 1 x 2
#>   a...1 a...2
#>   <dbl> <dbl>
#> 1     1     2

suppressMessages({
  tibble::as_tibble(a, .name_repair = "universal")
})
#> # A tibble: 1 x 2
#>   a...1 a...2
#>   <dbl> <dbl>
#> 1     1     2

它也适用于管道%&gt;%

library(dplyr, warn.conflicts = FALSE) 
tibble::as_tibble(a, .name_repair = "universal") %>% 
  suppressMessages()
#> # A tibble: 1 x 2
#>   a...1 a...2
#>   <dbl> <dbl>
#> 1     1     2

【讨论】:

    猜你喜欢
    • 2014-06-02
    • 2013-10-07
    • 1970-01-01
    • 2012-02-09
    • 2015-04-04
    • 2019-05-25
    • 2018-01-28
    相关资源
    最近更新 更多