Un autre problème, en présence d'un NAMESPACE, est que vous essayez d'exécuter une fonction non exportée à partir du package foo .
Par exemple (artificiel, je sais, mais):
> mod <- prcomp(USArrests, scale = TRUE)
> plot.prcomp(mod)
Error: could not find function "plot.prcomp"
Premièrement, vous ne devriez pas appeler directement les méthodes S3, mais supposons que plot.prcomp
c'était en fait une fonction interne utile dans le package foo . Pour appeler une telle fonction si vous savez ce que vous faites, vous devez utiliser :::
. Vous devez également connaître l'espace de noms dans lequel se trouve la fonction. En utilisant, getAnywhere()
nous constatons que la fonction est dans les statistiques du package :
> 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>
Nous pouvons donc maintenant l'appeler directement en utilisant:
> stats:::plot.prcomp(mod)
J'ai utilisé plot.prcomp
juste comme exemple pour illustrer le but. En utilisation normale, vous ne devriez pas appeler des méthodes S3 comme celle-ci. Mais comme je l'ai dit, si la fonction que vous souhaitez appeler existe (il peut s'agir d'une fonction utilitaire cachée par exemple), mais qu'elle est dans a namespace
, R signalera qu'il ne peut pas trouver la fonction à moins que vous ne lui disiez dans quel espace de noms chercher .
Comparez cela à ce qui suit:
stats::plot.prcomp
Ce qui précède échoue car pendant qu'il est stats
utilisé plot.prcomp
, il n'est pas exporté, stats
car l'erreur nous le dit à juste titre:
Erreur: 'plot.prcomp' n'est pas un objet exporté depuis 'namespace: stats'
Ceci est documenté comme suit:
pkg :: name renvoie la valeur du nom de la variable exportée dans l'espace de noms pkg, tandis que pkg ::: name renvoie la valeur du nom de la variable interne.