2017-09-15 10 views
7

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 

なぜそれがパイプ演算子と括弧では動作しませんが? 動作させるために使用する必要がある特定の構文はありますか?

+3

を書くことができます –

+4

あなたが試していることをやり遂げる方法はないと思います。する。 pipe演算子は、先行する呼び出しによって戻されたオブジェクトを受け取り、それを後続の呼び出しに送ります。警告はオブジェクトの一部ではありません。発生時にキャストされ、ある機能から次の機能に渡すことはできません。私は、最も読みやすい解決策は、 'suppressWarnings'を呼び出しのチェーン全体で包むことだと思います。 – Benjamin

+0

私はあなたが 'try'と同じ問題を抱えていると思います(エラーを捕らえるため) – Cath

答えて

2

一つの解決策は、オプションを変更する%T>%パイプを使用することです(dplyrに含まれていない、magrittrから!)

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

あなたは、この場合にもとてもきれいではない、purr::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自身の回避策

@もあります

そして、私は元の試行が動作しない理由としてベンジャミンさんのコメント@盗んだ:

警告は、オブジェクトの一部ではありません。それらが発生した場合、キャスト と次

EDIT 1つの関数から渡すことはできませんされています

リンクソリューションは、あなただけのc("1", "2", "ABC") %W>% as.numeric

Custom pipe to silence warnings

関連する問題