2017-09-15 15 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

एक और कामकाज 'सी (" 1 "," 2 "," एबीसी ")%>% {suppressWarnings (as.numeric (।))}' –

+4

मुझे उम्मीद नहीं है कि आप जो कोशिश कर रहे हैं उसे करने का एक तरीका है करने के लिए। पाइप ऑपरेटर पिछले कॉल द्वारा ऑब्जेक्ट वापस ले जाता है और इसे अगली कॉल पर आगे बढ़ा देता है। चेतावनी वस्तुओं का हिस्सा नहीं हैं; जब वे होते हैं तो उन्हें कास्ट किया जाता है, और एक समारोह से अगले तक पारित नहीं किया जा सकता है। मुझे लगता है कि सबसे पठनीय समाधान कॉल की पूरी श्रृंखला के आसपास 'suppressWarnings' को लपेटना है। – Benjamin

+0

मुझे लगता है कि आपको 'try' (त्रुटियों को कैप्चर करने के लिए) के साथ एक ही समस्या होगी – Cath

उत्तर

2

एक समाधान (magrittr से, dplyr में शामिल नहीं!)

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

तुम भी purr::quietly, तो सुंदर नहीं इस्तेमाल कर सकते हैं इस मामले में ... विकल्पों को संशोधित करने के लिए %T>% पाइप का उपयोग किया जाएगा

library(purr) 
c("1", "2", "ABC") %>% {quietly(as.numeric)}() %>% extract2("result") 
c("1", "2", "ABC") %>% map(quietly(as.numeric)) %>% map_dbl("result") 
पूर्णता के लिए के लिए

, यहाँ भी @ docendo-discimus के समाधान और ओ पी के अपने तरीके को

हैं

और मैं क्यों मूल कोशिश काम नहीं करता है के रूप में @ बेंजामिन की टिप्पणी चोरी कर रहा हूँ:

चेतावनी वस्तुओं का हिस्सा नहीं हैं; वे डाली कर रहे हैं जब वे होते हैं, और एक समारोह से अगले

संपादित करने के लिए पारित नहीं किया जा सकता है:

जुड़ा हुआ समाधान की अनुमति देगा तुम सिर्फ लिखने के लिए c("1", "2", "ABC") %W>% as.numeric

Custom pipe to silence warnings

संबंधित मुद्दे