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):
> mod <- prcomp(USArrests, scale = TRUE)
> plot.prcomp(mod)
Error: could not find function "plot.prcomp"
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. Mit getAnywhere()
wir feststellen , dass die Funktion in Paket - Statistik :
> 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 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 befindet namespace
, 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 der stats
Verwendung plot.prcomp
nicht exportiert wird, stats
wie der Fehler zu Recht sagt:
Fehler: 'plot.prcomp' ist kein exportiertes Objekt aus 'namespace: stats'
Dies ist wie folgt dokumentiert:
pkg :: name gibt den Wert des exportierten Variablennamens im Namespace pkg zurück, während pkg ::: name den Wert des internen Variablennamens zurückgibt.