首页 > 解决方案 > 包装器/副词以抑制 R 中的消息

问题描述

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

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

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

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

标签: r

解决方案


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

它也适用于管道%>%

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

推荐阅读