gpt4 book ai didi

r - overrideWarnings() 不适用于管道运算符

转载 作者:行者123 更新时间:2023-12-02 21:09:18 25 4
gpt4 key购买 nike

我正在尝试使用 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关于为什么最初的尝试不起作用的评论:

Warnings are not part of the objects; they are cast when they occur, and cannot be passed from one function to the next

编辑:

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

Custom pipe to silence warnings

关于r - overrideWarnings() 不适用于管道运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46239615/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com