Comment démasquer une fonction dans R, en raison de collisions de noms sur le chemin de recherche
-
15-09-2020 - |
Question
Quand j'ai chargé le paquet debug
déboguer un script avec zoo
objets, j'ai eu des problèmes :fonction index
depuis zoo
j'ai été masqué par debug
emballer.Comment puis-je démasquer index
?De manière générale, comment gérer ces problèmes de collision de noms ?Nous n'utilisons tout simplement pas debug
un paquet avec « zoo » ?
La solution
Les symboles exportés sont toujours identifiables par le ::
opérateur:
zoo::index
Les fonctions cachées non déclarées dans l'espace de noms sont toujours accessibles en utilisant :::
(triple deux-points), et l'exemple serait
zoo:::.onLoad
que vous pouvez voir même s’il n’est pas exporté.
Autres conseils
Vous pouvez décharger le package qui a des fonctions masquées puis le recharger.Il retrouvera la priorité dans le chemin de recherche :
unloadNamespace("zoo")
library("zoo")
À l'avenir, si vous souhaitez charger un package tout en l'empêchant de masquer d'autres fonctions, vous pourrez spécifier sa position dans le chemin de recherche avec un nombre arbitrairement grand :
library("debug", pos = .Machine$integer.max)
C'est seulement masqué pour vous mais ce n'est pas masqué pour le zoo, donc lorsqu'une fonction de zoo essaie d'utiliser l'index, elle trouvera toujours son propre index en premier.
zoo a également une méthode time.zoo donc si z est un objet zoo, vous pouvez utiliser time(z) à la place d'index(z).
Enfin, vous pouvez toujours vous référer à zoo::index pour vous assurer d'obtenir celui de zoo.