suppressWarnings()不';不要和管道操作员一起工作
我试图使用suppressWarnings()不';不要和管道操作员一起工作,r,magrittr,R,Magrittr,我试图使用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",
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
!)
您也可以使用purrr::安静地,在本例中不太漂亮
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>%写入.numeric
另一种解决方法可能是c(“1”、“2”、“ABC”)%%>%{suppressWarnings(as.numeric()}
我不希望有什么方法可以完成您正在尝试的操作。管道操作符获取前一个调用返回的对象,并将其向前推到下一个调用。警告不是对象的一部分;它们在发生时被强制转换,不能从一个函数传递到下一个函数。我认为最具可读性的解决方案是将suppressWarnings
包装在整个调用链中。我想您在try
(捕捉错误)方面也会遇到同样的问题。我认为@Benjamin很好地回答了第一个问题,从而使第二个问题变得无关紧要。谢谢,先生!如果发生在RMarkdown脚本中,可以将warning=FALSE
添加到块选项中。
c("1", "2", "ABC") %>% {suppressWarnings(as.numeric(.))}
suppressWarnings(c("1", "2", "ABC") %>% as.numeric())