2014-06-17 4 views
7

मैं उबंटू 14 पर आर 3.0.2 का उपयोग कर रहा हूं। मैं अपने कोड में कुछ भारी गणना करता हूं, और मैंनेकंपाइलर-पैकेज का उपयोग करना और "ग्लोबल वैरिएबल के लिए कोई दृश्यमान बाध्यकारी नहीं"

के साथ "कंपाइलर" पैकेज को आजमाया
compilePKGS(enable=TRUE) 
enableJIT(3) 

और ऐसा लगता है कि यह मेरे कोड को तेज करता है। बहुत अच्छा!

लेकिन हर अपने पैकेज "संकलक", मैं

Note: no visible binding for global variable '.Data' 

या अपने खुद के एस 4 वस्तुओं (अपने "obj @ परिणाम" कोड में) के साथ कुछ इसी तरह की तरह नोटों की एक बहुत कुछ मिलता है सक्षम बनाता है:

Note: no visible binding for global variable 'result' 

उदाहरण के लिए, स्वयं निर्मित एस 4 ऑब्जेक्ट का हिस्सा है। setCompilerOptions("suppressAll", TRUE) या setCompilerOptions("suppressUndefined", TRUE) जोड़ने से मदद नहीं मिली। जब मैं पूरी तरह से कंपाइलर पैकेज को निष्क्रिय करता हूं, तो कोई भी नोट पॉप अप नहीं होता है, इसलिए यह संकलक-पैकेज/jit की मेरी समझ के साथ एक समस्या हो सकती है?

इन नोट्स को दबाने के लिए मैं क्या कर सकता हूं?

संपादित करें:

require(compiler) 
compilePKGS(enable=TRUE) 
enableJIT(3) 



setClass(Class = "testobject", 
     slots = c(data  = "numeric", 
        test  = "character", 
        split = "numeric", 
        name  = "character" 
     ) 
) 

a <- new("testobject", data=c(1,2,3,4), test="TEST", split=5, name="NAME") 

for(i in [email protected]){ 
    print(i) 
} 

सरल उदाहरण का उत्पादन

Note: no visible binding for global variable '.Data' 
Note: no visible binding for global variable '.Data' 

सीधे ClassDefinition कॉल

+0

यदि आप 'ड्राटा' को परिभाषित करते हैं तो आप ऐसे नोट्स छुपा सकते हैं (उदा। अपनी स्क्रिप्ट की शुरुआत में '.ata <- NULL' जोड़ें)। मुझे पूरी तरह से यकीन नहीं है कि यह यहां क्यों जारी किया गया है, तो हो सकता है कि कोई और पुष्टि कर सके कि यह एक सहेजने वाली चीज़ है। –

+0

हाँ, यह सच है, मुझे [link] (http://stackoverflow.com/a/23476834/2720455) में एक समान उत्तर मिला, लेकिन मजाकिया बात यह है कि ये संदेश प्रकट नहीं होते हैं, जब मैं कंपाइलर को निष्क्रिय करता हूं , या जिट (3)। जुड़े धागे में कामकाज पर्यावरण में चर बनाता है। मुझे नहीं लगता कि एक पैकेज के लिए appropiate? यह संकलक से संबंधित लगता है या क्या मुझे कुछ याद आ रही है? आपकी सहायताके लिए धन्यवाद! :) – Marc

+1

@Marc क्या आपको किसी भी मौके से समाधान मिला? –

उत्तर

7

के बाद आप का उपयोग आर से इन नोटों को दबा सकती हैं

setCompilerOptions(suppressAll = TRUE)

"सभी" दबाने वाले "अपरिभाषित" विकल्पों को अलग-अलग दबाने की कोई आवश्यकता नहीं है। वैकल्पिक रूप से, आप पर्यावरण परिवर्तनीय

export R_COMPILER_SUPPRESS_ALL=true (या इसी तरह के विभिन्न ओएस के तहत) सेट अप कर सकते हैं।

आप चर रहे हैं या संकलक को अपरिभाषित हो रहे हैं के बारे में केवल चेतावनी को दबाने के लिए चाहते हैं तो आपके

setCompilerOptions(suppressUndefined=TRUE)

कर सकते हैं और अगर आप केवल चर .Data के लिए ऐसा करना चाहता था, आप कर सकते हैं

setCompilerOptions(suppressUndefined=".Data") करें।

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

export R_ENABLE_JIT=3

की स्थापना सबसे आक्रामक अनुकूलन सक्षम करने के लिए आप आर से यह कर सकते हैं, आप भी या

export R_COMPILER_OPTIMIZE=3

सेट कर सकते हैं आर से चलाने setCompilerOptions(optimize=3)

पर्यावरण चर के माध्यम से जेआईटी संकलन को सक्षम करते समय, आपको संकलक पैकेज को स्पष्ट रूप से लोड करने की आवश्यकता नहीं है - यह स्वचालित रूप से किया जाएगा।

+0

हां! धन्यवाद। मुझे आश्चर्य है कि मैंने suppressAll = TRUE कहीं और नहीं देखा है, लेकिन यह मेरे लिए चाल है। –

+0

कंपाइलर विकल्प सेट करना मैन्युअल (? SetCompilerOptions) में शामिल है, आर के एक नए संस्करण में इसे स्पष्ट करने के लिए एक उदाहरण भी होगा। –

3

आप एक वैश्विक चर का उपयोग करके, उदाहरण के

के लिए
utils::globalVariables(".Data") 

परिभाषित कर सकते हैं इस 'नहीं दिखाई वैश्विक चर के लिए बाइंडिंग "नोट नहीं कर पाएगा।

इसका लक्ष्य सभी संकलक संदेश को दबाने का लाभ है जो इसे लक्षित किया गया है; आप अन्य, उपयोगी, कंपाइलर संदेशों को दबाने नहीं देंगे।

+1

यदि आप केवल इस विशेष चेतावनी को दबाना चाहते हैं, तो ऐसा करने का इच्छित तरीका setCompilerOptions (suppressUndefined = "डेटा") के माध्यम से है। –

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