2012-01-10 19 views
15

कई आर संकुल मैं के साथ काम करने के बजाय "संदेश" के "प्रिंट" या "चेतावनी" द्वारा प्रदर्शित संदेश) कार्य है कि उनके सभी संदेशों और चेतावनी आदेशों के माध्यम से मुद्रित करने के लिए (देना नहीं बल्कि संदेश को आदेश से कॉल शामिल() या चेतावनी()। मैं इन कार्यों को प्रगति संकेतकों, आदि को चुप करने में सक्षम होना चाहता हूं, लेकिन मानक supress चेतावनी() या supressMessages यह नहीं करता है। क्या कोई तरीका है कि मैं सिर्फ दबाने वाला प्रिंट कर सकता हूं?दबाने आर

उदाहरण के लिए:

silly_developer_function <- function(x){ 
    print("Thanks for using my function!!") 
    if(is(x, "numeric")) 
    print("warning, x should be a character") 
    x 
} 

मैं एक साधारण समारोह suppressPrint() है कि मैं इस समारोह है कि चेतावनी और बेकार संदेश (दबाने हैं, लेकिन अभी भी वापसी मुद्रित करने के लिए एक फोन के आसपास लपेट सकता है करना चाहते हैं मूल्य)।

+0

'सिंक' का उपयोग करने की हैकिश रणनीति है, लेकिन एक बेहतर तरीका हो सकता है। – joran

+0

@cboettig - साइमन के समाधान के अपने प्रस्तावित संपादन अच्छा है, लेकिन बेहतर एक संपादन/परिशिष्ट अपने खुद के पोस्ट करने के लिए के रूप में शामिल किया जाएगा। धन्यवाद। –

+0

@ जोशो'ब्रायन पॉइंटर के लिए धन्यवाद। क्या मैं उस प्रस्ताव के साथ अपना मूल प्रश्न संपादित करूं? प्रश्न को उत्तर में बदलने के लिए अजीब लगता है? – cboettig

उत्तर

25

ठीक है, उन पैकेज गाड़ी के साथ शुरू करने के लिए कर रहे हैं। का उपयोग किसी भी चीज़ के लिए print कार्यान्वयन में दुष्प्रभाव एक गंभीर गलती है।

कहा कि, आप बस इसे मुद्रण के बजाय इस तरह के कोड से उत्पादन इकट्ठा करने के लिए capture.output() उपयोग कर सकते हैं। एक और hacky रास्ता तो के लिए यह ऊपर

capture.output(x <- silly_developer_function(...)) 
print(x) 
+0

ग्रेट समाधान। मैं इसे प्रिंट करने से बचने के लिए capture.output के आउटपुट को असाइन कर सकता हूं। सहमत हैं कि यह बग्गी कोड के आसपास एक काम है, लेकिन संदेश() के बजाय प्रिंट का उपयोग मैं संकुल में उपयोग कर रहा हूं ताकि आपका समाधान काफी आसान हो! – cboettig

+1

FWIW यदि आप कंसोल पर उत्पादन बारे में चिंतित हैं (जो 'प्रिंट (..) कहते हैं' स्वचालित रूप से) आप में 'अदृश्य (...)' –

+0

धन्यवाद 'capture.output' लपेट कर सकते हैं, कि उपयोगी है। मुझे स्वेव विगेट्स लिखने में इस समस्या का सामना करना पड़ता है जो कुछ ऐसे कार्यों पर लूप करता है, और स्वीवे/बुनाई भी स्वचालित रूप से प्रिंट जोड़ता है। आदर्श रूप से इसे स्वीवे विकल्पों में दबाया जा सकता है जिस तरह संदेश और चेतावनियां हो सकती हैं। – cboettig

0

होगा डिफ़ॉल्ट ओवरराइड करने के लिए print कार्य है। यह कुछ कार्यक्षमताओं को प्रभावित करेगा, जैसे कि कार्यों के शरीर को मुद्रित करना, लेकिन अपने स्वयं के प्रिंट विधियों वाले ऑब्जेक्ट्स सामान्य रूप से सामान्य रूप से वापस आते हैं।

print <- function(...) {} 

> silly_developer_function("a") 
[1] "a" 
> silly_developer_function(1) 
[1] 1 
+0

यह सामान्य रूप से काम नहीं करेगा, क्योंकि संकुल फ़ंक्शन लुकअप के लिए वैश्विक नामस्थान का उपयोग नहीं करते हैं। –

+0

@ सिमन उरबानक आह, हाँ यह सच है – James

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