मुझे पता है कि वैरिएबल नामकरण करते समय वैश्विक नामस्थान से नामों का उपयोग न करना अच्छा अभ्यास है, लेकिन जब आप इसे गलती से करते हैं तो क्या होता है?आर को फ़ंक्शन का उपयोग करने के बारे में कैसे पता चलता है, यदि उस फ़ंक्शन का नाम किसी मान पर फिर से सौंप दिया गया है?
मैंने सोचा कि मैं पिछले वस्तु खो देगा लेकिन आर हुड के नीचे कुछ प्रवंचना है लगता है:
print(sd)
#> function (x, na.rm = FALSE)
#> sqrt(var(if (is.vector(x) || is.factor(x)) x else as.double(x),
#> na.rm = na.rm))
#> <bytecode: 0x0000000017e687b8>
#> <environment: namespace:stats>
sd <- 12.2
print(sd)
#> [1] 12.2
sd(1:10)
#> [1] 3.02765
तो अब आर जानता दोनों लंबाई एक डबल वेक्टर sd
कहा जाता है और एक आँकड़े समारोह है वैश्विक नामस्थान में sd()
?
या जब मैं sd(1:10)
पर कॉल करता हूं तो दुभाषिया स्वचालित रूप से इसे sd.default()
पर फैलाता है? लेकिन आर sd
पर एक डिफ़ॉल्ट विधि को देखने के लिए कैसे जानता है क्योंकि यह अब एक वेक्टर है? तो स्मृति में विभिन्न स्थानों में संग्रहीत कार्यों और चर को उसी नाम से संदर्भित किया जा सकता है?
obviously_a_user_defined_variable <- 257
obviously_a_user_defined_variable(1:10)
#> Error in obviously_a_user_defined_variable(1:10): could not find
# function "obviously_a_user_defined_variable"
सरल उत्तर: 'sd (1:10)' फ़ंक्शन 'sd' पर कॉल है। तो आर 'sd()' नामक फ़ंक्शन की तलाश करता है, जिसे इसे प्री-लोड किए गए आंकड़े पैकेज में मिलता है। –
आप जिस शब्द (और टैग) का उपयोग करना चाहते हैं वह ** 'shadowing' ** है, जैसा कि 'उसी नाम के चर' फ़ंक्शन को छाया दे रहा है '। कड़ाई से, फ़ंक्शन का नाम 'पुनः असाइन नहीं किया गया' है। – smci