आर

2012-01-12 11 views
6

में सी चेतावनी संदेशों को दबाएं मैं आर पैकेज e1071 से आर फ़ंक्शन को कॉल कर रहा हूं जो libsvm (एक सी प्रोग्राम) के साथ इंटरफेस किया गया है। यह फ़ंक्शन आर कंसोल पर सी (printf) चेतावनी संदेश गुजर रहा है। मुझे यह पता है क्योंकि चेतावनी संदेश फॉर्म के हैं (चेतावनी: ...) जबकि आर चेतावनी संदेश पूंजीकृत हैं (यानी चेतावनी: ...)।आर

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

कोई विचार?

धन्यवाद!

+0

इतना अस्पष्ट क्यों? क्या आप आर पैकेज के माध्यम से libsvm में इंटरफेसिंग कर रहे हैं? या आप कुछ कस्टम पर काम कर रहे हैं? जीसीसी एक कंपाइलर है, मुझे संदेह है कि रन-टाइम चेतावनियां इससे आ रही हैं, अधिक संभावना है कि वे libsvm सी कोड में printfs हैं। – Mark

+0

yep e1071 पैकेज - मुझे लगता है कि आप सही हैं, संदेश एक printf कथन से आ रहे हैं। क्या मुझे सी कोड में जाने और इसे हटाने की ज़रूरत है? या आर से कुछ कर सकता हूं? – Michael

+0

मुझे कभी भी मेरी मशीन पर libsvm इंस्टॉल करने की याद नहीं है, मैंने अभी आर पैकेज डाउनलोड किया है। क्या इसका मतलब है कि libsvm स्रोत कोड आर पैकेज में है? – Michael

उत्तर

9

समारोह stdio बजाय Rprintf/REprintf या warning जिसके कारण आर उत्पादन का पुनः दिशा काम नहीं करेगा उपयोग करता है। इसके बजाय आर आउटपुट का उपयोग करने के लिए libsvm में कॉल को ठीक करने का उचित समाधान है।

stdio उत्पादन हैकिंग संभव है - आप फिर से प्रत्यक्ष कर सकते हैं उत्पादन अपने स्वयं के पाइप के लिए और क्या आप इसके साथ करना चाहते हैं, लेकिन एक) यह सी में काम का एक सा और ख) यह है क्योंकि आप की जरूरत है खतरनाक है फ़ंक्शन के साथ किए जाने के बाद मानक व्यवहार को पुनर्स्थापित करने के लिए - भले ही यह त्रुटियां हो और सी) यदि शैल पर उपयोग किए जाने पर आर आउटपुट के साथ बातचीत हो सकती है।

आप एक बहुत whacky, गंदा अभी तक त्वरित समाधान चाहते हैं, multicore से collect(parallel(..., silent=TRUE))[[1]] में अपने कार्य को चलाने - यह को दबा stdout (आप multicore:::closeStderr() जोड़ सकते हैं अगर आप stderr को दबाने के लिए और साथ ही चाहते हैं)।