Un autre problème, en présence d'un ESPACE DE NOM, est que vous essayez d'exécuter une fonction non exportée du package foo.
Par exemple (artificiel, je sais, mais):
> mod <- prcomp(USArrests, scale = TRUE)
> plot.prcomp(mod)
Erreur : impossible de trouver la fonction "plot.prcomp"
Tout d'abord, vous ne devriez pas appeler directement les méthodes S3, mais supposons que plot.prcomp
était en fait une fonction interne utile du 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 nom dans lequel se trouve la fonction. En utilisant getAnywhere()
, nous trouvons que la fonction se trouve dans le package stats:
> getAnywhere(plot.prcomp)
Un seul objet correspondant à ‘plot.prcomp’ a été trouvé
Il a été trouvé aux endroits suivants
registred S3 method for plot from namespace stats
namespace:stats
avec la valeur
function (x, main = deparse(substitute(x)), ...)
screeplot.default(x, main = main, ...)
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 les méthodes S3 de cette manière. Mais comme je l'ai dit, si la fonction que vous voulez appeler existe (il pourrait s'agir d'une fonction utilitaire cachée par exemple), mais est dans un espace de nom
, R signalera qu'il ne peut pas trouver la fonction à moins que vous ne lui disiez dans quel espace de nom chercher.
Comparez cela à ce qui suit: stats::plot.prcomp
Ce qui précède échoue car bien que stats
utilise plot.prcomp
, il n'est pas exporté de stats
comme l'erreur nous l'indique à juste titre:
Erreur : 'plot.prcomp' n'est pas un objet exporté de 'espace de nom:stats'
Ceci est documenté comme suit:
pkg::nom renvoie la valeur de la variable exportée nom dans l'espace de nom pkg, tandis que pkg:::nom renvoie la valeur de la variable interne nom.
5 votes
Avant de voter pour fermer cette question, lisez d'abord cette discussion sur Meta : meta.stackexchange.com/questions/101892/…
2 votes
Si tout le reste échoue, essayez de rechercher dans le code source pour R de base et vos packages installés
3 votes
@nullglob Cela semble quelque peu extrême :-)
0 votes
J'ai une question pertinente : stackoverflow.com/questions/23357551/…. Dans ce cas, N'IMPORTE QUELLE commande
R
échoue, maisq()
! Les conseils seront grandement appréciés !0 votes
Peut-être stupide, mais faites attention à ne pas nommer la sortie de la fonction comme la fonction elle-même. [Appris par expérience...]