Dies ist eine FAQ -Frage, bitte seien Sie so vollständig wie möglich. Die Antwort ist eine Community-Antwort. Wenn Sie der Meinung sind, dass etwas fehlt, können Sie es gerne bearbeiten.
Ich verwende R und habe some.function
versucht, aber ich habe folgende Fehlermeldung erhalten:
Error: could not find function "some.function"
Diese Frage wird sehr regelmäßig gestellt. Wenn Sie diese Art von Fehler in R erhalten, wie können Sie sie beheben?
Es gibt einige Dinge, die Sie überprüfen sollten:
install.packages("thePackage")
(dies muss nur einmal gemacht werden)require(thePackage)
oder library(thePackage)
(dies sollte jedes Mal durchgeführt werden, 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, um ein Informationsfeld zu erhalten, in dem Sie erfahren können, in welchem Paket es enthalten ist.find
und getAnywhere
können auch zum Auffinden von Funktionen verwendet werden.findFn
im sos
-Paket verwenden, wie in diese Antwort erläutert.RSiteSearch("some.function")
oder Suchen mit rdocumentation oder rseek sind alternative Möglichkeiten, um die Funktion zu finden.Manchmal müssen Sie eine ältere Version von R verwenden, aber für eine neuere Version erstellten Code ausführen. 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 das Paket backports verwenden, um solche Funktionen zur Verfügung zu stellen. Sie finden auch eine Liste der Funktionen, die im git-Repo von backports zurückportiert werden müssen. Beachten Sie, dass ältere R-Versionen als R3.0.0 nicht mit Paketen kompatibel sind, die für R3.0.0 und spätere Versionen erstellt wurden.
Ein anderes Problem besteht in der Anwesenheit eines NAMESPACE darin, dass Sie versuchen, eine nicht exportierte Funktion aus Paket foo auszuführen.
Zum Beispiel (erfunden, ich weiß, aber):
> mod <- prcomp(USArrests, scale = TRUE)
> plot.prcomp(mod)
Error: could not find function "plot.prcomp"
Erstens sollten Sie S3-Methoden nicht direkt aufrufen, nehmen wir jedoch an, dass plot.prcomp
tatsächlich eine nützliche interne Funktion in Paket foo war. Um eine solche Funktion aufzurufen, benötigen Sie :::
, wenn Sie wissen, was Sie tun. Sie müssen auch den Namespace kennen, in dem die Funktion gefunden wird. Mit getAnywhere()
finden wir, dass die Funktion im Paket stats ist:
> 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>
So können wir es jetzt direkt aufrufen mit:
> stats:::plot.prcomp(mod)
Ich habe plot.prcomp
nur als Beispiel verwendet, um den Zweck zu veranschaulichen. Im normalen Gebrauch sollten Sie keine S3-Methoden wie diese aufrufen. Aber wie gesagt, wenn die Funktion, die Sie aufrufen möchten, vorhanden ist (es könnte sich beispielsweise um eine verborgene Dienstprogrammfunktion handeln), die sich jedoch in einem Namespace befindet, wird R melden, dass sie die Funktion nicht finden kann, wenn Sie nicht angeben, welchen Namespace sie anzeigen sollen im.
Ich kann dieses Problem normalerweise lösen, wenn ein Computer unter meiner Kontrolle steht, aber bei der Arbeit mit einem Netz ist das eher ärgerlich. 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 eine gute Überprüfung.ldd
-Ergebnisse für R, um sicherzugehen, dass gemeinsame Bibliotheken verwendet werdenEinige dieser Schritte sind schon ziemlich alltäglich geworden. Obwohl # 7 als ein guter Ausgangspunkt erscheint, werden diese in ungefährer Reihenfolge der Häufigkeit aufgelistet, die ich sie benutze.
Wenn dies während der Überprüfung Ihres Pakets auftritt (R CMD-Prüfung), werfen Sie einen Blick auf Ihren NAMESPACE.
Sie können dieses Problem lösen, indem Sie dem NAMESPACE die folgende Anweisung hinzufügen:
exportPattern("^[^\\\\.]")
Dies exportiert alles, was nicht mit einem Punkt (".") Beginnt. Dadurch können Sie Ihre verborgenen Funktionen haben, beginnend mit einem Punkt:
.myHiddenFunction <- function(x) cat("my hidden function")
Ich hatte den Fehler
Fehler: Funktion
some.function
konnte nicht gefunden werden
bei der R CMD-Überprüfung eines Pakets, das ich mit RStudio erstellt habe, kann es passieren. Ich fand das Hinzufügen
exportPattern (".")
zu der NAMESPACE-Datei tat den Trick. Als Randbemerkung hatte ich RStudio ursprünglich so konfiguriert, dass es die Dokumentation mit ROxygen erstellt - und die Konfiguration ausgewählt hat, in der ROxygen meine NAMESPACE-Datei für mich schreibt, wodurch meine Änderungen immer gelöscht wurden. Also habe ich in meiner Instanz NAMESPACE von der Roxygen-Konfiguration entfernt und exportPattern (".") Zu NAMESPACE hinzugefügt, um diesen Fehler zu beheben.
Dieser Fehler kann auch dann auftreten, wenn der Name der Funktion gültig ist, wenn einige obligatorische Argumente fehlen (d. H., Sie haben nicht genügend Argumente angegeben).
Ich bekam dies in einem Rcpp-Kontext, in dem ich eine C++ - Funktion mit optionalen Argumenten schrieb und diese Argumente nicht in R zur Verfügung stellte konnte keine passende Funktion für den richtigen Namen finden, aber eine falsche Anzahl von Argumenten.
Rcpp-Funktion: SEXP RcppFunction(arg1, arg2=0) {}
R Anrufe:RcppFunction(0)
löst den Fehler ausRcppFunction(0, 0)
nicht
Rdocumentation.org hat eine sehr praktische Suchfunktion, mit der Sie unter anderem Funktionen finden können - aus allen Paketen auf CRAN sowie aus Paketen von Bioconductor und GitHub.
Wenn Sie parallelMap
verwenden, müssen Sie benutzerdefinierte Funktionen in die Slave-Jobs exportieren, andernfalls erhalten Sie die Fehlermeldung "Funktion konnte nicht gefunden werden".
Wenn Sie für parallelStart
ein nicht fehlendes Niveau festlegen, sollte dasselbe Argument an parallelExport
übergeben werden. Andernfalls wird derselbe Fehler angezeigt. Also sollte dies strikt beachtet werden:
parallelStart(mode = "<your mode here>", N, level = "<task.level>")
parallelExport("<myfun>", level = "<task.level>")
Sie können diesen Fehler möglicherweise beheben durch Namensabstand :: den Funktionsaufruf
comparison.cloud(colors = c("red", "green"), max.words = 100)
zu
wordcloud::comparison.cloud(colors = c("red", "green"), max.words = 100)