त्रुटि: R में फ़ंक्शन नहीं ढूँढ सका ...


177

यह एक सामान्य प्रश्न है, इसलिए कृपया इसे यथासंभव पूरा करें। जवाब एक सामुदायिक जवाब है, इसलिए यदि आपको लगता है कि कुछ याद आ रहा है तो संपादित करने के लिए स्वतंत्र महसूस करें।

इस सवाल पर चर्चा की गई और मेटा पर मंजूरी दी गई।

मैं R का उपयोग कर रहा हूं और कोशिश की जा रही है some.functionलेकिन मुझे त्रुटि संदेश मिला है:

Error: could not find function "some.function"

यह सवाल बहुत नियमित रूप से सामने आता है। जब आपको R में इस प्रकार की त्रुटि मिलती है, तो आप इसे कैसे हल कर सकते हैं?


5
इससे पहले कि आप इस प्रश्न को बंद करने के लिए वोट करें, पहले मेटा पर इस हंगामे को पढ़ें: meta.stackexchange.com/questions/101892/…
एंड्री

2
यदि अन्य सभी विफल रहता है, तो बेस आर और आपके स्थापित पैकेजों के लिए सोर्स कोड को
टटोलने की कोशिश करें

3
@nullglob यह कुछ हद तक चरम लगता है
गेविन सिम्पसन

मेरे पास एक प्रासंगिक प्रश्न है: stackoverflow.com/questions/23357551/… । इस मामले में, कोई भी Rआदेश विफल रहता है, लेकिन q()! सलाह की बहुत सराहना की जाएगी!
अलेक्सांद्र ब्लेक

हो सकता है कि मूर्खतापूर्ण हो, लेकिन फ़ंक्शन के आउटपुट को फ़ंक्शन के रूप में नाम न देने के लिए सावधान रहें। [अनुभव से सीखा ...]
user3507584

जवाबों:


126

कुछ चीजें हैं जिन्हें आपको जांचना चाहिए:

  1. क्या आपने अपने फ़ंक्शन का नाम सही लिखा है? मामले संवेदनशील हैं।
  2. क्या आपने उस पैकेज को स्थापित किया है जिसमें फ़ंक्शन है? install.packages("thePackage")(यह केवल एक बार किया जाना चाहिए)
  3. क्या आपने उस पैकेज को कार्यक्षेत्र में संलग्न किया था? require(thePackage)या library(thePackage)(हर बार जब आप एक नया आर सत्र शुरू करते हैं तो यह किया जाना चाहिए)
  4. क्या आप एक पुराने R संस्करण का उपयोग कर रहे हैं जहाँ यह फ़ंक्शन अभी तक मौजूद नहीं था?

यदि आप सुनिश्चित नहीं हैं कि कौन सा पैकेज स्थित है, तो आप कुछ चीजें कर सकते हैं।

  1. यदि आप सुनिश्चित हैं कि आपने सही पैकेज स्थापित और संलग्न / लोड किया है, तो एक सूचना बॉक्स प्राप्त करें help.search("some.function")या लिखें ??some.functionजो आपको बता सके कि यह किस पैकेज में निहित है।
  2. findऔर getAnywhereकार्यों का पता लगाने के लिए भी इस्तेमाल किया जा सकता है।
  3. यदि आपके पास पैकेज के बारे में कोई सुराग नहीं है, तो आप इस उत्तर में बताए findFnअनुसार sosपैकेज में उपयोग कर सकते हैं ।
  4. RSiteSearch("some.function")या rdocumentation या rseek के साथ खोज फ़ंक्शन खोजने के लिए वैकल्पिक तरीके हैं।

कभी-कभी आपको R के पुराने संस्करण का उपयोग करने की आवश्यकता होती है, लेकिन नए संस्करण के लिए बनाया गया कोड चलाते हैं। नए जोड़े गए फ़ंक्शंस (उदाहरण के लिए आर 3.4.0 में हैनाम) तब नहीं मिलेगा। यदि आप एक पुराने आर संस्करण का उपयोग करते हैं और एक नए फ़ंक्शन का उपयोग करना चाहते हैं, तो आप ऐसे कार्यों को उपलब्ध कराने के लिए पैकेज बैकपोर्ट का उपयोग कर सकते हैं । आपको फ़ंक्शंस की एक सूची भी मिलती है, जिसे बैकपोर्ट के git रेपो पर बैकपोर्ट करने की आवश्यकता होती है । ध्यान रखें कि R3.0.0 से पुराने R संस्करण R3.0.0 और बाद के संस्करणों के लिए बनाए गए पैकेज के साथ असंगत हैं।


हाय जोरिस, मेरा एक त्वरित प्रश्न है। मैं आर में नया हूं लेकिन मैं इसे सफलतापूर्वक स्थापित करने में सक्षम था। मैं कमांड लाइन से "आकाशीय" पैकेज में "cosvol" फ़ंक्शन का उपयोग करना चाहूंगा। मेरे आर के विपरीत जो कि मेरे लिनक्स सिस्टम में फेडोरा रिपॉजिटरी से स्थापित है, मैंने अपने "होम" में एक अलग निर्देशिका में अपना "आकाशीय" पैकेज डाउनलोड किया है। हर बार मैं फ़ंक्शन "cosvol ()" का अनुरोध कर रहा हूं, यह कहता है, "फ़ंक्शन" cosdistolVol "नहीं मिल सका। मुझे यकीन नहीं है कि आर को मेरे निर्देशक के बारे में कैसे पता चलेगा जिसमें सभी फ़ंक्शन मेरे "आकाशीय" पैकेज में अलग से डाउनलोड किए गए हैं। आपकी मदद की सराहना की है।
बेंजामिन

यदि फ़ंक्शन कोर / बेस आर लाइब्रेरी में से एक में है, तो आपको इसे अपडेट करने की आवश्यकता हो सकती है। मेरे मामले में, मैं hasNameफ़ंक्शन का उपयोग करने की कोशिश कर रहा था utils। हालाँकि, मैं 3.3.1 का उपयोग कर रहा था और hasName3.4.0 तक पेश नहीं किया गया था। जैसा कि आप utilsस्टैंड-अलोन लाइब्रेरी के रूप में अपडेट नहीं कर सकते , आर / आर स्टूडियो ने कहा कि मेरे पास अपडेट करने के लिए कोई लाइब्रेरी नहीं है।
मपग

@mpag इसलिए क्योंकि बर्तन पैकेज R रिलीज़ का अभिन्न अंग है। यदि आप RSiteSearch ("hasName") का उपयोग करेंगे, तो शाब्दिक रूप से पहली प्रविष्टि बैकपोर्ट पैकेज का संदर्भ है जो उस फ़ंक्शन को R 3.3.1 में उपलब्ध कराएगा। अधिक जानकारी के लिए github.com/r-lib/backports भी देखें । मैंने उस मामले के लिए कुछ जानकारी जोड़ी है, सूचित करने के लिए thx
जॉरिस मेय्स

@JorisMeys जो बहुत मददगार है। मैं यह भी प्रस्तुत करना चाहता हूं कि जब उस फ़ंक्शन के सहायता पृष्ठ (जैसे? नाम) पर कोई फ़ंक्शन R में जोड़ा गया है तो यह दस्तावेज़ के लिए मानक अभ्यास होना चाहिए। जैसे न तो https://www.rdocumentation.org/packages/utils/versions/3.4.3/topics/hasNameऔर न ही https://stat.ethz.ch/R-manual/R-devel/library/utils/html/hasName.html"आर 3.4.0 में पेश" कहा, मैं इसे खत्म करने के लिए github repos के माध्यम से ब्राउज़ करके blameसमझ गया और बर्तन / आर / hasName.R और आधार / आर / मैच के लिए देखो
मप्रैग

@mpag या आप शाब्दिक रूप से पहली हिट खोल सकते थे RSiteSearch("hasName")और वही जानकारी प्राप्त कर सकते थे। इसीलिए मैंने इसे सालों पहले उस जवाब में जोड़ा। यह जानने के लिए एक उपयोगी ट्रिक है ;-)
जोरिस मेय्स

29

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 ::: नाम आंतरिक चर नाम का मान लौटाता है।


1
धन्यवाद - इसने मुझे R 3 में अपग्रेड करने के बाद बचाया could not find function "anova.lm"... stats:::anova.lm()इसके बजाय कॉल करने के साथ तय किया
ErichBSchulz

जबकि यह प्रासंगिक नहीं है, के उपयोग को :::डिजाइन की गलती के रूप में संदर्भित किया गया है और ::इसे पसंद किया जाता है। आसानी से संदर्भ नहीं मिल सकता है।
नेल्सनगॉन

1
@NelsonGon पूरे सम्मान के साथ, ::और :::कर रहे हैं अलग और अपने संपादित नहीं करता है काम ! plot.prcomp()समारोह नहीं है आँकड़े नाम स्थान से निर्यात किया है ताकि आप उपयोग करने की आवश्यकता है :::
गेविन सिम्पसन

@GavinSimpson राइट! मैंने डिज़ाइन त्रुटि के लिए एक सम्मानित आर देव शब्द लिया और वास्तव में इसे कभी सत्यापित नहीं किया था। शायद, यह उनकी निजी राय थी।
नेल्सनगॉन

11

मैं आमतौर पर इस समस्या को हल कर सकता हूं जब एक कंप्यूटर मेरे नियंत्रण में है, लेकिन ग्रिड के साथ काम करते समय यह एक उपद्रव से अधिक है। जब कोई ग्रिड समरूप नहीं होता है, तो सभी पुस्तकालय स्थापित नहीं किए जा सकते हैं, और मेरा अनुभव अक्सर यह रहा है कि एक पैकेज स्थापित नहीं किया गया था क्योंकि एक निर्भरता स्थापित नहीं थी। इसे संबोधित करने के लिए, मैं निम्नलिखित जाँच करता हूँ:

  1. क्या फोरट्रान स्थापित है? ('गफ़रन' के लिए देखें।) यह आर में कई प्रमुख पैकेजों को प्रभावित करता है।
  2. जावा स्थापित है? क्या जावा क्लास के रास्ते सही हैं?
  3. जांचें कि पैकेज व्यवस्थापक द्वारा स्थापित किया गया था और उपयुक्त उपयोगकर्ता द्वारा उपयोग के लिए उपलब्ध है। कभी-कभी उपयोगकर्ता गलत स्थानों पर पैकेज स्थापित करेंगे या सही पुस्तकालयों तक उचित पहुंच के बिना चलेंगे। .libPaths()एक अच्छी जाँच है।
  4. lddसाझा पुस्तकालयों के बारे में सुनिश्चित करने के लिए, आर के परिणामों की जाँच करें
  5. यह समय-समय पर एक स्क्रिप्ट चलाने के लिए अच्छा है जो बस जरूरत के हर पैकेज को लोड करता है और कुछ कम परीक्षण करता है। यह वर्कफ़्लो में पैकेज की समस्या को जल्द से जल्द पकड़ता है। यह परीक्षण या इकाई परीक्षण का निर्माण करने के लिए समान है, सिवाय इसके कि यह सुनिश्चित करने के लिए धूम्रपान परीक्षण की तरह है कि बहुत मूल सामान काम करता है।
  6. यदि पैकेज नेटवर्क-सुलभ स्थान पर संग्रहीत किए जा सकते हैं, तो क्या वे हैं? यदि वे नहीं कर सकते हैं, तो क्या मशीनों में निरंतर संस्करण सुनिश्चित करने का कोई तरीका है? (यह ओटी लग सकता है, लेकिन सही पैकेज इंस्टॉलेशन में सही संस्करण की उपलब्धता शामिल है ।)
  7. क्या पैकेज दिए गए OS के लिए उपलब्ध है? दुर्भाग्य से, सभी पैकेज प्लेटफ़ॉर्म पर उपलब्ध नहीं हैं। यह चरण 5 पर वापस जाता है। यदि संभव हो, तो पैकेज के उपयुक्त स्वाद पर स्विच करके या कुछ मामलों में निर्भरता को बंद करके एक अलग ओएस को संभालने का एक तरीका खोजने का प्रयास करें।

इसका काफी हद तक सामना करने के बाद, इनमें से कुछ कदम काफी नियमित हो जाते हैं। हालाँकि # 7 एक अच्छे शुरुआती बिंदु की तरह लग सकते हैं, लेकिन इन्हें मेरे द्वारा उपयोग की जाने वाली आवृत्ति के अनुमानित क्रम में सूचीबद्ध किया गया है।


2
सुनिश्चित करने के लिए उपयोगी विचार, लेकिन "पैकेज स्थापित करते समय मुझे एक त्रुटि क्यों मिलती है" के लिए एक उत्तर।
IRTFM

@ डविन: हो सकता है, लेकिन वास्तव में नहीं। मैं अस्पष्ट हो सकता था। ये समस्याएँ तब सामने आती हैं जब कोई काम ग्रिड पर रुकने के लिए होता है क्योंकि पैकेज स्थापित नहीं किया गया था। एक ग्रिड पर सॉफ्टवेयर स्थिरता बनाए रखना कठिन नहीं है, लेकिन स्थापना, रखरखाव और डिबगिंग के लिए एक अच्छी प्रक्रिया की आवश्यकता होती है। ये केवल कुछ आइटम हैं जो प्रत्येक चरण से आते हैं, कम से कम जब वे किसी कार्य के उपलब्ध होने पर आने वाली कर्कश ध्वनि से संबंधित होते हैं। :)
Iterator

6

यदि यह आपके पैकेज (आर सीएमडी चेक) की जांच करते समय होता है, तो अपने NAMESPACE पर एक नज़र डालें।

आप NAMESPACE में निम्न कथन जोड़कर इसे हल कर सकते हैं:

exportPattern("^[^\\\\.]")

यह वह सब कुछ निर्यात करता है जो डॉट ("।") से शुरू नहीं होता है। यह आपको अपने छिपे हुए कार्य करने की अनुमति देता है, जो डॉट के साथ शुरू होता है:

.myHiddenFunction <- function(x) cat("my hidden function")

RStudio में यह मेरे लिए विफल है - त्रुटि: '\'। चरित्र स्ट्रिंग में "" [[\ _ "शुरू होने वाला एक गैर-मान्यता प्राप्त भागने है
एंड्रयू

1
यदि मैंने ऐसा पैकेज नहीं लिखा है, तो मुझे क्या करना चाहिए, अगर मुझे कोई त्रुटि मिलती है तो क्या होगा? पैकेज अपने आप में एक आंतरिक विधि का उपयोग करना चाहता है जो परिभाषित नहीं है क्योंकि संभवतः लेखक ने ऊपर नहीं किया है।
आंद्रे लुस

4

मेरे पास त्रुटि थी

त्रुटि: फ़ंक्शन नहीं मिल सका some.function

जब मैं RStudio के साथ एक पैकेज का R CMD चेक कर रहा था, तब हुआ। मैं जोड़ पाया

exportPattern ( "।")

NAMESPACE फ़ाइल के लिए चाल चली। एक विचार के रूप में, मैंने शुरुआत में प्रलेखन बनाने के लिए ROxygen का उपयोग करने के लिए RStudio को कॉन्फ़िगर किया था - और कॉन्फ़िगरेशन का चयन किया जहां ROxygen मेरे लिए मेरी NAMESPACE फ़ाइल लिखेगा, जो मेरे संपादन को मिटाता रहा। इसलिए, मेरे उदाहरण में, मैंने इस त्रुटि को हल करने के लिए NAMESPACE को रॉक्सीजन कॉन्फ़िगरेशन से अनचेक किया और NAMESPACE में ExportPattern ("" ") को जोड़ा।


1
आप roxygen2 का बेहतर उपयोग करते हैं, जो आपके द्वारा नामस्थान फ़ाइलों में किए गए संपादन को पहचानता है और उन्हें अक्षुण्ण रखता है। मैं भी नाम स्थान फ़ाइल में ExportPattern ("।") का उपयोग करने के खिलाफ दृढ़ता से सलाह दूंगा। अपनी व्यक्तिगत फ़ाइलों के बजाय टैग @export का उपयोग करें, इसलिए आप केवल उन कार्यों को निर्यात करें जिनकी निर्यात की आवश्यकता है। Roxygen2 स्वचालित रूप से उन सभी कार्यों को निर्यात करने के लिए नाम स्थान को अपडेट करेगा, जिन्हें निर्यात करने की आवश्यकता है।
जोरिस मेस

1
जोरिस - मैं वास्तव में टिप्पणी करने के लिए समय निकालकर आपकी सराहना करता हूं; आपने जो लिखा है, उससे मैं १००% सहमत हूं। मैं अब devtools / roxygen2 का उपयोग कर रहा हूं और निम्नलिखित सभी कार्यों को पूरा कर रहा हूं जिन्हें मुझे निर्यात करने की आवश्यकता है: # '@export
swihart

4

यह त्रुटि तब भी हो सकती है जब फ़ंक्शन का नाम मान्य है यदि कुछ अनिवार्य तर्क गायब हैं (यानी आपने पर्याप्त तर्क नहीं दिए हैं)।
मुझे यह एक Rcpp संदर्भ में मिला, जहां मैंने वैकल्पिक तर्क के साथ एक C ++ फ़ंक्शन लिखा था, और आर में उन तर्कों को प्रदान नहीं किया था। ऐसा प्रतीत होता है कि C ++ के विकल्प संबंधी तर्क आर द्वारा अनिवार्य रूप से देखे गए थे। परिणामस्वरूप, R को नहीं मिल सका। सही नाम के लिए एक मिलान फ़ंक्शन लेकिन तर्कों की गलत संख्या।

Rcpp फंक्शन: SEXP RcppFunction(arg1, arg2=0) {}
आर कॉल:
RcppFunction(0)त्रुटि को जन्म देती है
RcppFunction(0, 0)नहीं है


2

Rdocumentation.org का एक बहुत ही आसान खोज कार्य है - जो अन्य चीजों के बीच - आपको फंक्शंस को खोजने की सुविधा देता है - CRAN के सभी पैकेजों से, साथ ही बायोकॉन्टर और जीथहब के पैकेजों से।

यहां छवि विवरण दर्ज करें


1

यदि आप उपयोग कर रहे हैं, parallelMapतो आपको दास कार्यों के लिए कस्टम फ़ंक्शन को निर्यात करने की आवश्यकता होगी, अन्यथा आपको "फ़ंक्शन नहीं मिल सका" त्रुटि मिलती है।

यदि आप एक गैर-लापता स्तर सेट करते हैं parallelStartतो उसी तर्क को पारित किया जाना चाहिए parallelExport, अन्यथा आपको वही त्रुटि मिलती है। तो इसका सख्ती से पालन किया जाना चाहिए:

parallelStart(mode = "<your mode here>", N, level = "<task.level>")
parallelExport("<myfun>", level = "<task.level>")

0

आप इस त्रुटि को नाम स्थान :: फ़ंक्शन कॉल द्वारा ठीक करने में सक्षम हो सकते हैं

comparison.cloud(colors = c("red", "green"), max.words = 100)

सेवा

wordcloud::comparison.cloud(colors = c("red", "green"), max.words = 100)

1
त्रुटि "तुलना" के बजाय "तुलना" कहती है। मुझे लगता है कि नाम स्थान की समस्या नहीं थी :-)
जोरिस मेयर्स

गुड स्पॉट @ जॉरिस मेयस
टोनी क्रोनिन

-1

मुझे वही मिला, त्रुटि, मैं संस्करण .99xxx चला रहा था, मैंने सहायता मेनू से अपडेट की जाँच की और My RStudio को 1.0x में अपडेट किया, फिर त्रुटि नहीं आई

इतना आसान समाधान, बस अपने आर स्टूडियो को अपडेट करें


1
क्या आप इस बात पर विस्तार से बता सकते हैं कि प्रकृति की त्रुटि क्या थी। यह मदद कर सकता है, लेकिन केवल बहुत विशिष्ट मामलों में।
जोरिस मेव्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.