Когда я загрузил пакет debug
для отладки скрипта с zoo
объектами, у меня возникла проблема: функция index
из zoo
была замаскирована пакетом debug
. Как я могу разоблачить index
? В общем, как решить эти проблемы с конфликтами имен? Мы просто не используем пакет debug
с `zoo'?
Как размаскировать функцию в R из-за конфликтов имен в пути поиска
Ответы (3)
Экспортированные символы всегда можно идентифицировать с помощью оператора ::
:
zoo::index
Доступ к скрытым функциям, не объявленным в пространстве имен, по-прежнему можно получить с помощью :::
(тройное двоеточие), и пример будет таким:
zoo:::.onLoad
который вы можете видеть, даже если он не экспортируется.
Вы можете выгрузить пакет с замаскированными функциями, а затем перезагрузить его. Он восстановит приоритет в пути поиска:
unloadNamespace("zoo")
library("zoo")
В будущем, если вы хотите загрузить пакет, не давая ему маскировать другие функции, вы можете указать его позицию в пути поиска сколь угодно большим числом:
library("debug", pos = .Machine$integer.max)
Он замаскирован только для вас, но не замаскирован для зоопарка, поэтому, когда функция зоопарка пытается использовать индекс, она все равно сначала найдет свой собственный индекс.
В зоопарке также есть метод time.zoo, поэтому, если z является объектом зоопарка, вы можете использовать time(z) вместо index(z).
Наконец, вы всегда можете обратиться к zoo::index, чтобы убедиться, что вы получили тот, что находится в зоопарке.