Dies soll eine FAQ-Frage sein, bitte seien Sie so vollständig wie möglich. Die Antwort ist eine Community-Antwort. Sie können sie also jederzeit bearbeiten, wenn Sie der Meinung sind, dass etwas fehlt.
Ich benutze R und habe es versucht, some.function
aber ich habe folgende Fehlermeldung erhalten:
Error: could not find function "some.function"
Diese Frage taucht sehr regelmäßig auf. Wenn Sie diese Art von Fehler in R erhalten, wie können Sie ihn beheben?
r
function
error-handling
r-faq
Joris Meys
quelle
quelle
R
schlägt JEDER Befehl fehl, aberq()
! Ratschläge werden sehr geschätzt!Antworten:
Es gibt einige Dinge, die Sie überprüfen sollten:
install.packages("thePackage")
(Dies muss nur einmal durchgeführt werden)require(thePackage)
oderlibrary(thePackage)
(dies sollte jedes Mal erfolgen, wenn Sie eine neue R-Sitzung starten)Wenn Sie nicht sicher sind, in welchem Paket sich diese Funktion befindet, können Sie einige Dinge tun.
help.search("some.function")
oder??some.function
ein Informationsfeld ein, in dem angegeben wird, in welchem Paket es enthalten ist.find
undgetAnywhere
kann auch zum Auffinden von Funktionen verwendet werden.findFn
in demsos
Paket verwenden, wie in dieser Antwort erläutert .RSiteSearch("some.function")
oder die Suche mit rdocumentation oder rseek sind alternative Möglichkeiten, um die Funktion zu finden.Manchmal müssen Sie eine ältere Version von R verwenden, aber Code ausführen, der für eine neuere Version erstellt wurde. Neu hinzugefügte Funktionen (zB hasName in R 3.4.0) werden dann nicht gefunden. Wenn Sie eine ältere R-Version verwenden und eine neuere Funktion verwenden möchten, können Sie die Paket- Backports verwenden , um solche Funktionen verfügbar zu machen. Sie finden auch eine Liste der Funktionen, die auf dem Git-Repo von Backports zurückportiert werden müssen . Beachten Sie, dass R-Versionen, die älter als R3.0.0 sind, nicht mit Paketen kompatibel sind, die für R3.0.0 und spätere Versionen erstellt wurden.
quelle
hasName
Funktion in zu verwendenutils
. Ich habe jedoch 3.3.1 verwendet undhasName
wurde erst mit 3.4.0 eingeführt. Da Sie nichtutils
als eigenständige Bibliothek aktualisieren können, gab R / R Studio an, dass ich keine zu aktualisierenden Bibliotheken hatte.https://www.rdocumentation.org/packages/utils/versions/3.4.3/topics/hasName
nochhttps://stat.ethz.ch/R-manual/R-devel/library/utils/html/hasName.html
sagen "eingeführt in R 3.4.0" Ich fand es heraus, indem ich durch Github-Repos blätterte und nachblame
utils / R / hasName.R und base / R / match.R suchteRSiteSearch("hasName")
und die gleichen Informationen erhalten können. Deshalb habe ich diese Antwort vor Jahren hinzugefügt. Es ist ein nützlicher Trick zu wissen ;-)Ein weiteres Problem bei Vorhandensein eines NAMESPACE besteht darin, dass Sie versuchen, eine nicht exportierte Funktion aus dem Paket foo auszuführen .
Zum Beispiel (erfunden, ich weiß, aber):
Erstens sollten Sie S3-Methoden nicht direkt aufrufen, sondern nehmen an, dass
plot.prcomp
es sich tatsächlich um eine nützliche interne Funktion in Paket foo handelt . Um eine solche Funktion aufzurufen, wenn Sie wissen, was Sie tun, müssen Sie Folgendes verwenden:::
. Sie müssen auch den Namespace kennen, in dem sich die Funktion befindet. MitgetAnywhere()
wir feststellen , dass die Funktion in Paket - Statistik :So können wir es jetzt direkt aufrufen mit:
Ich habe
plot.prcomp
nur als Beispiel verwendet, um den Zweck zu veranschaulichen. Im normalen Gebrauch sollten Sie solche S3-Methoden nicht aufrufen. Aber wie gesagt, wenn die Funktion, die Sie aufrufen möchten, vorhanden ist (es könnte sich beispielsweise um eine versteckte Dienstprogrammfunktion handeln), sich jedoch in a befindetnamespace
, meldet R, dass die Funktion nur gefunden werden kann, wenn Sie ihr mitteilen, in welchem Namespace gesucht werden soll .Vergleichen Sie dies mit dem Folgenden:
stats::plot.prcomp
Das Obige schlägt fehl, da es während derstats
Verwendungplot.prcomp
nicht exportiert wird,stats
wie der Fehler zu Recht sagt:Dies ist wie folgt dokumentiert:
quelle
could not find function "anova.lm"
... behoben mitstats:::anova.lm()
stattdessen Anruf:::
als Konstruktionsfehler bezeichnet, und dies::
wird bevorzugt. Die Referenz kann nicht ohne weiteres gefunden werden.::
und:::
sind unterschiedlich und deine Bearbeitung nicht funktioniert ! Dieplot.prcomp()
Funktion wird nicht aus dem Statistik-Namespace exportiert, daher müssen Sie sie verwenden:::
.Normalerweise kann ich dieses Problem lösen, wenn ein Computer unter meiner Kontrolle steht, aber es ist eher ein Ärgernis, wenn ich mit einem Raster arbeite. Wenn ein Grid nicht homogen ist, werden möglicherweise nicht alle Bibliotheken installiert, und ich habe oft die Erfahrung gemacht, dass ein Paket nicht installiert wurde, weil keine Abhängigkeit installiert wurde. Um dies zu beheben, überprüfe ich Folgendes:
.libPaths()
ist ein guter Scheck.ldd
Ergebnisse für R, um sicherzugehen, dass gemeinsam genutzte Bibliotheken vorhanden sindEinige dieser Schritte werden ziemlich routinemäßig. Obwohl # 7 als guter Ausgangspunkt erscheint, werden diese in ungefährer Reihenfolge der Häufigkeit aufgelistet, in der ich sie verwende.
quelle
Wenn dies auftritt, während Sie Ihr Paket überprüfen (R CMD-Prüfung), sehen Sie sich Ihren NAMESPACE an.
Sie können dieses Problem lösen, indem Sie dem NAMESPACE die folgende Anweisung hinzufügen:
Dies exportiert alles, was nicht mit einem Punkt (".") Beginnt. Auf diese Weise können Sie Ihre versteckten Funktionen beginnend mit einem Punkt haben:
quelle
Ich hatte den Fehler
passiert, wenn eine R CMD-Prüfung eines Pakets durchgeführt wird, das ich mit RStudio erstellt habe. Ich fand das Hinzufügen
exportPattern (".")
in die NAMESPACE-Datei hat den Trick gemacht. Als Nebenbemerkung hatte ich RStudio zunächst so konfiguriert, dass ROxygen für die Dokumentation verwendet wurde - und die Konfiguration ausgewählt, in der ROxygen meine NAMESPACE-Datei für mich schreiben würde, wodurch meine Änderungen immer wieder gelöscht wurden. In meinem Fall habe ich NAMESPACE in der Roxygen-Konfiguration deaktiviert und exportPattern (".") Zu NAMESPACE hinzugefügt, um diesen Fehler zu beheben.
quelle
Dieser Fehler kann auch dann auftreten, wenn der Name der Funktion gültig ist, wenn einige obligatorische Argumente fehlen (dh Sie haben nicht genügend Argumente angegeben).
Ich habe dies in einem Rcpp-Kontext erhalten, in dem ich eine C ++ - Funktion mit optionalen Argumenten geschrieben und diese Argumente in R nicht angegeben habe. Es schien, dass optionale Argumente aus C ++ von R als obligatorisch angesehen wurden. Infolgedessen konnte R nicht finden eine Übereinstimmungsfunktion für den richtigen Namen, aber eine falsche Anzahl von Argumenten.
Rcpp-Funktion:
SEXP RcppFunction(arg1, arg2=0) {}
R-Aufrufe: Löst
RcppFunction(0)
den FehlerRcppFunction(0, 0)
nicht ausquelle
Rdocumentation.org verfügt über eine sehr praktische Suchfunktion, mit der Sie unter anderem Funktionen finden können - sowohl aus allen CRAN-Paketen als auch aus Paketen von Bioconductor und GitHub.
quelle
Wenn Sie verwenden, müssen
parallelMap
Sie benutzerdefinierte Funktionen in die Slave-Jobs exportieren. Andernfalls wird die Fehlermeldung "Funktion konnte nicht gefunden werden" angezeigt.Wenn Sie eine nicht fehlende Ebene für
parallelStart
dasselbe Argument festlegen, an das übergeben werden soll,parallelExport
wird derselbe Fehler angezeigt. Das sollte also genau befolgt werden:quelle
Möglicherweise können Sie diesen Fehler durch den Namensabstand :: den Funktionsaufruf beheben
zu
quelle
Ich habe den gleichen Fehler erhalten, ich habe die Version .99xxx ausgeführt, ich habe im Hilfemenü nach Updates gesucht und mein RStudio auf 1.0x aktualisiert, dann ist der Fehler nicht aufgetreten
So einfache Lösung, aktualisieren Sie einfach Ihr R Studio
quelle