2017-09-15 23 views
7

boru operatörü ile çalışmaz. Normalde kullanıldığındaSuppressWarnings() Ben <code>suppressWarnings()</code> işlevini kullanarak uyarıları bastırmak için çalışıyorum

Şaşırtıcı şekilde uyarılarını kaldırır, ancak bu boru %>% operatörü kullandığınızda bunu başaramazsa. İşte

bazı örnek kod şudur:

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 

neden parantez ile çalışmak değil boru operatörü ile geliyor? Çalışması için kullanmam gereken belirli bir sözdizimi var mı?

+3

Başka bir geçici çözüm, 'c ("1", "2", "ABC")%>% {suppressWarnings (as.numeric (.))} ' –

+4

Denemek istediğin şeyi yapmanın bir yolu olduğunu beklemez. yapmak. Boru operatörü, önceki arama tarafından döndürülen nesneyi alır ve sonraki çağrıya iletir. Uyarılar nesnelerin parçası değildir; meydana geldiklerinde dökülürler ve bir işlevden diğerine geçemezler. En çok okunabilir çözümün, aramaların tam zinciri etrafında 'bastırmayı' sarmalaması olduğunu düşünüyorum. – Benjamin

+0

Sanırım "try" (hatalar yakalamak için) ile aynı soruna sahip olursun – Cath

cevap

2

bir çözüm (magrittr itibaren, dplyr yer almayan!)

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

Ayrıca ... Bu konuda çok güzel değil purr::quietly, kullanabilirsiniz seçeneklerini değiştirmek için %T>% boru kullanmak olacaktır

burada bütünlük uğruna
library(purr) 
c("1", "2", "ABC") %>% {quietly(as.numeric)}() %>% extract2("result") 
c("1", "2", "ABC") %>% map(quietly(as.numeric)) %>% map_dbl("result") 

, ayrıca @ docendo-discimus 'ın çözüm ve OP'ın kendi geçici çözüm

vardır

Ve orijinal deneyin çalışmıyor neden olarak Benjamin'in comment @ çalıyorum:

Uyarılar nesnelerin bir parçası değildir; Onlar, meydana gelecek

EDIT'e bir işlevinden geçilemeyen zaman dökme:

bağlantılı çözüm sağlayacak sadece yazmak için c("1", "2", "ABC") %W>% as.numeric

Custom pipe to silence warnings

İlgili konular