Innym problemem w obecności NAMESPACE jest to, że próbujesz uruchomić niewyeksportowaną funkcję z pakietu foo .
Na przykład (wymyślone, wiem, ale):
> mod <- prcomp(USArrests, scale = TRUE)
> plot.prcomp(mod)
Error: could not find function "plot.prcomp"
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ąc getAnywhere()
, stwierdzamy, że funkcja znajduje się w statystykach pakietu :
> 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>
Więc możemy teraz wywołać to bezpośrednio za pomocą:
> stats:::plot.prcomp(mod)
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 a namespace
, 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ż podczas stats
używania plot.prcomp
nie jest eksportowane z, stats
jak słusznie mówi nam błąd:
Błąd: „plot.prcomp” nie jest wyeksportowanym obiektem z „namespace: stats”
Jest to udokumentowane w następujący sposób:
pkg :: name zwraca wartość nazwy wyeksportowanej zmiennej w przestrzeni nazw pkg, natomiast pkg ::: name zwraca wartość nazwy zmiennej wewnętrznej.