r语言 - suppressWarnings() 不适用于管道运算符



我正在尝试使用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

为什么它可以与括号合作,而与管道操作员无关?我应该使用特定的语法来使其起作用吗?

一种解决方案是使用%T>%管道修改选项(来自magrittr,不包括dplyr!)

c("1", "2", "ABC") %T>% {options(warn=-1)} %>% as.numeric() %T>% {options(warn=0)}

您也可以使用purrr::quietly,在这种情况下不是那么漂亮...

library(purr)
c("1", "2", "ABC") %>% {quietly(as.numeric)}() %>% extract2("result")
c("1", "2", "ABC") %>% map(quietly(as.numeric)) %>% map_dbl("result")

为了完整,这也是 @docendo-discimus的解决方案和OP自己的解决方法

c("1", "2", "ABC") %>% {suppressWarnings(as.numeric(.))} 
suppressWarnings(c("1", "2", "ABC") %>% as.numeric())

我正在窃取 @benjamin关于为什么原始尝试不起作用的评论:

警告不是对象的一部分;他们在发生时被铸造 并且不能从一个函数传递到下一个

编辑:

链接的解决方案将允许您仅编写c("1", "2", "ABC") %W>% as.numeric

定制管道沉默警告

相关内容

  • 没有找到相关文章

最新更新