Другая проблема в присутствии NAMESPACE заключается в том, что вы пытаетесь запустить неэкспортированную функцию из пакета foo .
Например (надуманный, я знаю, но):
> mod <- prcomp(USArrests, scale = TRUE)
> plot.prcomp(mod)
Error: could not find function "plot.prcomp"
Во-первых, вы не должны вызывать методы S3 напрямую, но давайте предположим, что это plot.prcomp
была действительно полезная внутренняя функция в пакете foo . Для вызова такой функции, если вы знаете, что делаете, требуется использование :::
. Вам также необходимо знать пространство имен, в котором находится функция. Используя, getAnywhere()
мы находим, что функция находится в статистике пакета :
> 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>
Теперь мы можем вызвать его напрямую, используя:
> stats:::plot.prcomp(mod)
Я использовал plot.prcomp
только в качестве примера, чтобы проиллюстрировать цель. При обычном использовании вы не должны вызывать такие методы S3. Но, как я уже сказал, если функция, которую вы хотите вызвать, существует (например, это может быть скрытая служебная функция), но находится вnamespace
, R сообщит, что не может найти функцию, если вы не укажете ей, в каком пространстве имен искать. ,
Сравните это со следующим:
stats::plot.prcomp
вышеописанное не помогает, потому что, хотя оно stats
используется plot.prcomp
, оно не экспортируется, stats
как правильно говорит нам ошибка:
Ошибка: «plot.prcomp» не является экспортируемым объектом из «пространства имен: статистика»
Это задокументировано следующим образом:
pkg :: name возвращает значение экспортированного имени переменной в пространстве имен pkg, тогда как pkg ::: name возвращает значение имени внутренней переменной.