【发布时间】:2018-02-24 15:34:04
【问题描述】:
我正在尝试使用 suppressWarnings() 函数来抑制警告。
令人惊讶的是,它在正常使用时会删除警告,但在使用管道 %>% 运算符时却无法这样做。
这是一些示例代码:
library(magrittr)
c("1", "2", "ABC") %>% as.numeric()
# [1] 1 2 NA
# Warning message:
# In function_list[[k]](value) : NAs introduced by coercion
c("1", "2", "ABC") %>% as.numeric() %>% suppressWarnings
# [1] 1 2 NA
# Warning message:
# In function_list[[i]](value) : NAs introduced by coercion
suppressWarnings(c("1", "2", "ABC") %>% as.numeric())
# [1] 1 2 NA
为什么它可以使用括号而不是管道运算符? 我应该使用特定的语法来使其工作吗?
【问题讨论】:
-
另一种解决方法可能是
c("1", "2", "ABC") %>% {suppressWarnings(as.numeric(.))} -
我不希望有办法做你想做的事。管道运算符获取前面调用返回的对象并将其推送到后面的调用。警告不是对象的一部分;它们在发生时被强制转换,并且不能从一个函数传递到下一个函数。我认为最易读的解决方案是将
suppressWarnings包裹在整个调用链中。 -
我猜你对
try也会有同样的问题(捕获错误) -
我认为@Benjamin 很好地回答了第一个问题,因此使第二个问题无关紧要。谢谢先生!
-
如果出现在 RMarkdown 脚本中,您可以将
warning = FALSE添加到块选项中。