2010-01-29 28 views
26

मैं आर में किसी पैकेज में कुछ कमांड की कार्यक्षमता को बदलने की कोशिश कर रहा हूं। आदेशों के स्रोत को देखने में काफी आसान है। हालांकि फ़ंक्शन पैकेज फ़ंक्शंस में मौजूद अन्य फ़ंक्शंस को कॉल करता है। ये कार्य वस्तुओं को निर्यात नहीं कर रहे हैं। तो मैं उन्हें कैसे एक्सेस कर सकता हूं?आर: नामस्थान से एक फ़ंक्शन को कॉल करना

विशिष्ट उदाहरण: मैं copula :: rmvdc में उपयोग किए जाने वाले asCall() फ़ंक्शन को कैसे एक्सेस करूं?

require(copula) 
copula::rmvdc 
getAnywhere("asCall") 

तो as.Call() योजक पैकेज में मौजूद है, लेकिन मैं इसे कैसे उपयोग करते हैं?

> copula::asCall 
Error: 'asCall' is not an exported object from 'namespace:copula' 

उत्तर

61

इस प्रयास करें:

copula:::asCall 

यह previously answered on R-help था। उस फ़ंक्शन को पैकेज नामस्थान में निर्यात नहीं किया गया था, इसलिए आपको इसके बजाय ::: ऑपरेटर का उपयोग करने की आवश्यकता है। आमतौर पर फ़ंक्शंस निर्यात नहीं किए जाते हैं जब वे सामान्य उपयोग के लिए नहीं हैं (उदा। आपको इस मामले में उन्हें दस्तावेज़ करने की आवश्यकता नहीं है)।

+12

मैं इस पर विश्वास नहीं कर सकते हैं ... मैं योजक की कोशिश की: asCall तो योजक :: asCall और फिर कहा, "अच्छी तरह से hellifiknow" –

13

विकास करते समय,? assignInNamespace बहुत उपयोगी है।

यह आपको एक गैर-निर्यातित फ़ंक्शन की एक नई प्रति पैकेज के नामस्थान में इंजेक्ट करने की अनुमति देता है।

यह अच्छा होगा अगर आर का त्रुटि संदेश अधिक उपयोगी था। बजाय:

Error: 'matrixToPaths' is not an exported object from 'namespace:OpenMx' 

क्यों नहीं जोड़ें:

You might try OpenMx:::matrixToPaths" 
+0

"क्यों नहीं जोड़ें ... "क्योंकि आपको किसी पैकेज की निजी ऑब्जेक्ट्स तक पहुंच नहीं है। यही कारण है कि उन्हें "निजी" कहा जाता है। वास्तव में, कोई पूछ सकता है कि क्यों '::: 'ऑपरेटर भी मौजूद है। –

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