To ma być pytanie z najczęściej zadawanych pytań, więc prosimy o podanie możliwie kompletnych informacji. Odpowiedź jest odpowiedzią społeczności, więc jeśli uważasz, że czegoś brakuje, możesz ją edytować.
Używam języka R i próbowałem, some.function
ale otrzymałem następujący komunikat o błędzie:
Error: could not find function "some.function"
To pytanie pojawia się bardzo regularnie. Kiedy otrzymujesz tego typu błąd w R, jak możesz go rozwiązać?
r
function
error-handling
r-faq
Joris Meys
źródło
źródło
R
polecenie nie powiedzie się, aleq()
! Rady będą bardzo mile widziane!Odpowiedzi:
Należy sprawdzić kilka rzeczy:
install.packages("thePackage")
(wystarczy to zrobić tylko raz)require(thePackage)
lublibrary(thePackage)
(należy to zrobić za każdym razem, gdy rozpoczynasz nową sesję języka R)Jeśli nie masz pewności, w jakim pakiecie znajduje się ta funkcja, możesz zrobić kilka rzeczy.
help.search("some.function")
lub??some.function
uzyskaj pole informacyjne, które może ci powiedzieć, w którym pakiecie się znajduje.find
igetAnywhere
może być również używany do lokalizowania funkcji.findFn
wsos
pakiecie, jak wyjaśniono w tej odpowiedzi .RSiteSearch("some.function")
lub wyszukiwanie za pomocą rdocumentation lub rseek to alternatywne sposoby znajdowania funkcji.Czasami trzeba użyć starszej wersji języka R, ale uruchomić kod utworzony dla nowszej wersji. Nowo dodane funkcje (np. HasName w R 3.4.0) nie zostaną wtedy znalezione. Jeśli używasz starszej wersji R i chcesz użyć nowszej funkcji, możesz użyć backportów pakietu, aby udostępnić takie funkcje. Znajdziesz również listę funkcji, które muszą zostać przeniesione do repozytorium git backports . Należy pamiętać, że wersje R starsze niż R3.0.0 są niekompatybilne z pakietami utworzonymi dla wersji R3.0.0 i nowszych.
źródło
hasName
funkcji wutils
. Jednak używałem wersji 3.3.1 ihasName
nie zostałem wprowadzony do wersji 3.4.0. Ponieważ nie możesz aktualizowaćutils
jako samodzielna biblioteka, R / R Studio powiedziało, że nie mam żadnych bibliotek do aktualizacji.https://www.rdocumentation.org/packages/utils/versions/3.4.3/topics/hasName
niehttps://stat.ethz.ch/R-manual/R-devel/library/utils/html/hasName.html
mówię „wprowadzone w R 3.4.0”. Skończyło się na tym, że doszedłem do tego, przeglądając repozytoria github i sprawdzającblame
pliki utils / R / hasName.R i base / R / match.RRSiteSearch("hasName")
i uzyskać te same informacje. Dlatego dodałem to lata temu do tej odpowiedzi. Warto wiedzieć ;-)Innym problemem w obecności NAMESPACE jest to, że próbujesz uruchomić niewyeksportowaną funkcję z pakietu foo .
Na przykład (wymyślone, wiem, ale):
Po pierwsze, nie powinieneś bezpośrednio wywoływać metod S3, ale załóżmy, że
plot.prcomp
faktycznie była to jakaś użyteczna funkcja wewnętrzna w pakiecie foo . Aby wywołać taką funkcję, jeśli wiesz, co robisz, musisz jej użyć:::
. Musisz także znać przestrzeń nazw, w której znajduje się funkcja. UżywającgetAnywhere()
, stwierdzamy, że funkcja znajduje się w statystykach pakietu :Więc możemy teraz wywołać to bezpośrednio za pomocą:
Użyłem
plot.prcomp
tylko przykładu, aby zilustrować cel. W normalnym użytkowaniu nie powinieneś wywoływać takich metod S3. Ale jak powiedziałem, jeśli funkcja, którą chcesz wywołać, istnieje (na przykład może to być ukryta funkcja narzędzia), ale znajduje się w anamespace
, R zgłosi, że nie może znaleźć funkcji, chyba że powiesz mu, w której przestrzeni nazw ma szukać .Porównaj to z następującym:
stats::plot.prcomp
Powyższe zawodzi, ponieważ podczasstats
używaniaplot.prcomp
nie jest eksportowane z,stats
jak słusznie mówi nam błąd:Jest to udokumentowane w następujący sposób:
źródło
could not find function "anova.lm"
... naprawiono z dzwonieniemstats:::anova.lm()
zamiast tego:::
jest określane jako błąd projektowy i::
jest to preferowane. Nie można łatwo znaleźć odniesienia.::
i:::
są różni a edycja nie działa !plot.prcomp()
Funkcja nie jest wywożone z obszaru nazw status więc trzeba użyć:::
.Zwykle mogę rozwiązać ten problem, gdy komputer jest pod moją kontrolą, ale jest to bardziej uciążliwe podczas pracy z siecią. Gdy siatka nie jest jednorodna, nie wszystkie biblioteki mogą zostać zainstalowane, a z mojego doświadczenia często wynika, że pakiet nie został zainstalowany, ponieważ zależność nie została zainstalowana. Aby rozwiązać ten problem, sprawdzam następujące kwestie:
.libPaths()
to dobry czek.ldd
wyniki dla R, aby mieć pewność co do bibliotek współdzielonychPo dość częstym napotkaniu tego, niektóre z tych kroków stają się dość rutynowe. Chociaż # 7 może wydawać się dobrym punktem wyjścia, są one wymienione w przybliżonej kolejności częstotliwości, z jaką ich używam.
źródło
Jeśli zdarzy się to podczas sprawdzania paczki (kontrola R CMD), spójrz na NAMESPACE.
Możesz rozwiązać ten problem, dodając następującą instrukcję do NAMESPACE:
Spowoduje to wyeksportowanie wszystkiego, co nie zaczyna się od kropki („.”). Dzięki temu możesz mieć ukryte funkcje, zaczynając od kropki:
źródło
Miałem błąd
dzieje się podczas sprawdzania R CMD pakietu, który tworzyłem za pomocą RStudio. Znalazłem dodawanie
exportPattern („.”)
do pliku NAMESPACE załatwiło sprawę. Na marginesie, początkowo skonfigurowałem RStudio do używania ROxygen do tworzenia dokumentacji - i wybrałem konfigurację, w której ROxygen zapisałby dla mnie mój plik NAMESPACE, który nadal kasował moje zmiany. Tak więc w moim przypadku odznaczyłem NAMESPACE w konfiguracji Roxygen i dodałem exportPattern („.”) Do NAMESPACE, aby rozwiązać ten błąd.
źródło
Ten błąd może wystąpić, nawet jeśli nazwa funkcji jest prawidłowa, jeśli brakuje niektórych obowiązkowych argumentów (tj. Nie podano wystarczającej liczby argumentów).
Otrzymałem to w kontekście Rcpp, gdzie napisałem funkcję C ++ z argumentami opcjonalnymi i nie podałem tych argumentów w R. Okazało się, że argumenty opcjonalne z C ++ były postrzegane jako obowiązkowe przez R. W rezultacie R nie mógł znaleźć pasująca funkcja dla poprawnej nazwy, ale niepoprawna liczba argumentów.
Funkcja Rcpp:
SEXP RcppFunction(arg1, arg2=0) {}
R Wywołania:
RcppFunction(0)
wywołuje błądRcppFunction(0, 0)
nieźródło
Rdocumentation.org ma bardzo przydatną funkcję wyszukiwania, która - między innymi - pozwala znaleźć funkcje - ze wszystkich pakietów w CRAN, a także z pakietów z Bioconductor i GitHub.
źródło
Jeśli używasz
parallelMap
, musisz wyeksportować niestandardowe funkcje do zadań podrzędnych, w przeciwnym razie pojawi się błąd „nie można znaleźć funkcji”.Jeśli ustawisz nie brakujący poziom
parallelStart
tego samego argumentu, należy go przekazaćparallelExport
, w przeciwnym razie otrzymasz ten sam błąd. Dlatego należy ściśle przestrzegać:źródło
Możesz być w stanie naprawić ten błąd, stosując odstępy między nazwami: wywołanie funkcji
do
źródło
Mam ten sam błąd, pracowałem w wersji .99xxx, sprawdziłem aktualizacje z menu pomocy i zaktualizowałem Moje RStudio do 1.0x, to błąd nie nadszedł
Tak proste rozwiązanie, wystarczy zaktualizować R Studio
źródło