NAMESPACE की मौजूदगी में एक और समस्या यह है कि आप पैकेज फू से एक अनएक्सपोर्टेड फंक्शन चलाने की कोशिश कर रहे हैं ।
उदाहरण के लिए (विवादित, मुझे पता है, लेकिन):
> mod <- prcomp(USArrests, scale = TRUE)
> plot.prcomp(mod)
Error: could not find function "plot.prcomp"
सबसे पहले, आपको S3 विधियों को सीधे कॉल नहीं करना चाहिए, लेकिन मान लें plot.prcomp
कि पैकेज फू में वास्तव में कुछ उपयोगी आंतरिक फ़ंक्शन था । ऐसे फ़ंक्शन को कॉल करने के लिए यदि आप जानते हैं कि आप क्या कर रहे हैं तो इसके उपयोग की आवश्यकता है :::
। आपको उस नामस्थान को भी जानना होगा जिसमें फ़ंक्शन पाया गया है। उपयोग करने से getAnywhere()
हमें पता चलता है कि फ़ंक्शन पैकेज आँकड़े में है :
> getAnywhere(plot.prcomp)
A single object matching ‘plot.prcomp’ was found
It was found in the following places
registered S3 method for plot from namespace stats
namespace:stats
with value
function (x, main = deparse(substitute(x)), ...)
screeplot.default(x, main = main, ...)
<environment: namespace:stats>
तो अब हम इसे सीधे उपयोग करके कॉल कर सकते हैं:
> stats:::plot.prcomp(mod)
मैंने plot.prcomp
उद्देश्य को स्पष्ट करने के लिए एक उदाहरण के रूप में उपयोग किया है । सामान्य उपयोग में आपको S3 विधियों को इस तरह से कॉल नहीं करना चाहिए। लेकिन जैसा कि मैंने कहा, यदि आप जिस फ़ंक्शन को कॉल करना चाहते हैं, वह मौजूद है (उदाहरण के लिए यह एक छिपी उपयोगिता फ़ंक्शन हो सकता है), लेकिन एक में है namespace
, आर रिपोर्ट करेगा कि यह फ़ंक्शन को तब तक नहीं मिल सकता जब तक कि आप यह नहीं बताएं कि कौन से नामस्थान में देखना है ।
इसकी तुलना निम्न से करें:
stats::plot.prcomp
उपरोक्त विफल रहता है क्योंकि stats
उपयोग करते समय plot.prcomp
, इसे निर्यात नहीं किया जाता है stats
क्योंकि त्रुटि हमें ठीक से बताती है:
त्रुटि: 'plot.prcomp' नामस्थान से निर्यात की गई वस्तु नहीं है: आँकड़े '
इसे निम्नानुसार प्रलेखित किया गया है:
pkg :: नाम ने namepace pkg में निर्यात किए गए चर नाम का मान लौटाया, जबकि pkg ::: नाम आंतरिक चर नाम का मान लौटाता है।