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