Ceci est censé être une question de FAQ, alors soyez aussi complet que possible. La réponse est une réponse de la communauté, alors n'hésitez pas à modifier si vous pensez qu'il manque quelque chose.
J'utilise R et some.function
j'ai essayé mais j'ai reçu le message d'erreur suivant:
Error: could not find function "some.function"
Cette question revient très régulièrement. Lorsque vous obtenez ce type d'erreur dans R, comment pouvez-vous le résoudre?
r
function
error-handling
r-faq
Joris Meys
la source
la source
R
commande échoue, maisq()
! Les conseils seront grandement appréciés!Réponses:
Il y a quelques points à vérifier:
install.packages("thePackage")
(Cela a seulement besoin d'être fait une fois)require(thePackage)
oulibrary(thePackage)
(cela devrait être fait chaque fois que vous démarrez une nouvelle session R)Si vous ne savez pas dans quel package se trouve cette fonction, vous pouvez faire plusieurs choses.
help.search("some.function")
ou??some.function
pour obtenir une boîte d'informations qui peut vous dire dans quel package il est contenu.find
etgetAnywhere
peut également être utilisé pour localiser des fonctions.findFn
dans lesos
package comme expliqué dans cette réponse .RSiteSearch("some.function")
ou la recherche avec rdocumentation ou rseek sont des moyens alternatifs de trouver la fonction.Parfois, vous devez utiliser une ancienne version de R, mais exécutez le code créé pour une version plus récente. Les fonctions nouvellement ajoutées (par exemple hasName dans R 3.4.0) ne seront pas trouvées alors. Si vous utilisez une ancienne version de R et que vous souhaitez utiliser une fonction plus récente, vous pouvez utiliser les backports du package pour rendre ces fonctions disponibles. Vous trouverez également une liste des fonctions qui doivent être rétroportées sur le référentiel git des backports . Gardez à l'esprit que les versions R antérieures à R3.0.0 sont incompatibles avec les packages créés pour R3.0.0 et les versions ultérieures.
la source
hasName
fonction dansutils
. Cependant, j'utilisais 3.3.1 et je n'ai étéhasName
introduit qu'à partir de 3.4.0. Comme vous ne pouvez pas mettreutils
à jour en tant que bibliothèque autonome, R / R Studio a déclaré que je n'avais aucune bibliothèque à mettre à jour.https://www.rdocumentation.org/packages/utils/versions/3.4.3/topics/hasName
nihttps://stat.ethz.ch/R-manual/R-devel/library/utils/html/hasName.html
dire "introduit dans R 3.4.0" J'ai fini par le découvrir en parcourant les dépôts de github et en regardantblame
pour utils / R / hasName.R et base / R / match.RRSiteSearch("hasName")
et obtenir les mêmes informations. C'est pourquoi j'ai ajouté cela il y a des années à cette réponse. C'est une astuce utile à savoir ;-)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):
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 :Nous pouvons donc maintenant l'appeler directement en utilisant:
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 anamespace
, 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 eststats
utiliséplot.prcomp
, il n'est pas exporté,stats
car l'erreur nous le dit à juste titre:Ceci est documenté comme suit:
la source
could not find function "anova.lm"
... corrigé avec un appel à lastats:::anova.lm()
place:::
a été qualifiée d'erreur de conception et c'est::
préférable. Impossible de trouver facilement la référence.::
et:::
sont différents et votre montage ne fonctionne pas ! Laplot.prcomp()
fonction n'est pas exportée depuis l'espace de noms stats, vous devez donc l'utiliser:::
.Je peux généralement résoudre ce problème lorsqu'un ordinateur est sous mon contrôle, mais c'est plus gênant lorsque je travaille avec une grille. Lorsqu'une grille n'est pas homogène, toutes les bibliothèques peuvent ne pas être installées, et mon expérience a souvent été qu'un package n'était pas installé car une dépendance n'était pas installée. Pour résoudre ce problème, je vérifie les éléments suivants:
.libPaths()
est un bon chèque.ldd
résultats pour R, pour être sûr des bibliothèques partagéesAyant rencontré cela un peu, certaines de ces étapes deviennent assez routinières. Bien que # 7 puisse sembler être un bon point de départ, ceux-ci sont listés dans l'ordre approximatif de la fréquence à laquelle je les utilise.
la source
Si cela se produit pendant que vous vérifiez votre package (contrôle R CMD), jetez un œil à votre NAMESPACE.
Vous pouvez résoudre ce problème en ajoutant l'instruction suivante à NAMESPACE:
Cela exporte tout ce qui ne commence pas par un point ("."). Cela vous permet d'avoir vos fonctions cachées, en commençant par un point:
la source
J'ai eu l'erreur
se produit lors de la vérification R CMD d'un package que je faisais avec RStudio. J'ai trouvé l'ajout
exportPattern (".")
dans le fichier NAMESPACE a fait l'affaire. Pour rappel, j'avais initialement configuré RStudio pour utiliser ROxygen pour faire la documentation - et sélectionné la configuration où ROxygen écrirait mon fichier NAMESPACE pour moi, ce qui continuait à effacer mes modifications. Donc, dans mon cas, j'ai décoché NAMESPACE de la configuration Roxygen et ajouté exportPattern (".") À NAMESPACE pour résoudre cette erreur.
la source
Cette erreur peut se produire même si le nom de la fonction est valide si certains arguments obligatoires sont manquants (c'est-à-dire que vous n'avez pas fourni suffisamment d'arguments).
J'ai obtenu cela dans un contexte Rcpp, où j'ai écrit une fonction C ++ avec des arguments optionnels, et je n'ai pas fourni ces arguments dans R. Il est apparu que les arguments optionnels du C ++ étaient considérés comme obligatoires par R. En conséquence, R n'a pas pu trouver une fonction correspondante pour le nom correct mais un nombre incorrect d'arguments.
Fonction Rcpp:
SEXP RcppFunction(arg1, arg2=0) {}
R Appels:
RcppFunction(0)
déclenche l'erreurRcppFunction(0, 0)
nela source
Rdocumentation.org a une fonction de recherche très pratique qui - entre autres - vous permet de trouver des fonctions - à partir de tous les packages sur CRAN, ainsi que des packages de Bioconductor et GitHub.
la source
Si vous utilisez,
parallelMap
vous devrez exporter des fonctions personnalisées vers les travaux esclaves, sinon vous obtenez une erreur "Impossible de trouver la fonction".Si vous définissez un niveau non manquant sur
parallelStart
le même argument doit être passéparallelExport
, sinon vous obtenez la même erreur. Cela devrait donc être strictement suivi:la source
Vous pourrez peut-être corriger cette erreur par l'espacement des noms :: l'appel de fonction
à
la source
J'ai eu la même erreur, j'utilisais la version .99xxx, j'ai vérifié les mises à jour dans le menu d'aide et mis à jour My RStudio vers 1.0x, puis l'erreur n'est pas venue
Solution si simple, il suffit de mettre à jour votre R Studio
la source