Un altro problema, in presenza di NAMESPACE, è che si sta tentando di eseguire una funzione non esportata dal pacchetto pippo .
Ad esempio (inventato, lo so, ma):
> mod <- prcomp(USArrests, scale = TRUE)
> plot.prcomp(mod)
Error: could not find function "plot.prcomp"
In primo luogo, non dovresti chiamare direttamente i metodi S3, ma supponiamo che in plot.prcomp
realtà fosse una utile funzione interna nel pacchetto pippo . Per chiamare tale funzione se sai cosa stai facendo richiede l'uso di :::
. È inoltre necessario conoscere lo spazio dei nomi in cui si trova la funzione. Usando getAnywhere()
troviamo che la funzione è nelle statistiche del pacchetto :
> 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>
Quindi ora possiamo chiamarlo direttamente usando:
> stats:::plot.prcomp(mod)
Ho usato plot.prcomp
solo come esempio per illustrare lo scopo. Nell'uso normale non dovresti chiamare metodi S3 come questo. Ma come ho detto, se esiste la funzione che si desidera chiamare (ad esempio potrebbe essere una funzione di utilità nascosta), ma è in a namespace
, R segnalerà che non è possibile trovare la funzione a meno che non si indichi in quale spazio dei nomi cercare .
Confrontalo con il seguente:
stats::plot.prcomp
Quanto sopra fallisce perché, mentre stats
utilizza plot.prcomp
, non viene esportato stats
come l'errore ci dice giustamente:
Errore: "plot.prcomp" non è un oggetto esportato da "namespace: stats"
Questo è documentato come segue:
pkg :: name restituisce il valore del nome della variabile esportata nello spazio dei nomi pkg, mentre pkg ::: name restituisce il valore del nome della variabile interna.