R: Как я могу предотвратить (или, по крайней мере, предвидеть) конфликты имен между кодом внутри базовых функций R и функций из позже установленных пакетов? - PullRequest
0 голосов
/ 03 ноября 2018

У меня загружен пакет (tidyverse), который переименовывает функцию base R (filter).

Я выполняю функцию base R (arima.sim), которая вызывает функцию filter и возвращает ошибку от dplyr::filter.ts.

Я могу скопировать код из arima.sim и создать arima.sim2, заменив filter на stats::filter, что решает проблему. Но:

  1. Функция dplyr dplyr::filter.ts полезно читает:

    dplyr :: filter.ts функция (.data, ...) { bad_args (". data", "должен быть источником данных, а не объектом ts, хотите stats::filter()?") }

Есть ли что-то, что должно было предупредить меня об этом конфликте, кроме предупреждений при загрузке tidyverse? Потому что, когда я получил эти предупреждения, я понятия не имел, что буду запускать filter, так как в то время не читал код stats::arima.sim.

  1. Почему stats::arima.sim не нашел filter в stats namespace до того, как заглянул в dplyr namespace? Разве пространства имен пакетов не должны предотвращать подобные вещи?

  2. Если не считать воссоздания базовых R-функций с использованием ::, как описано выше, есть ли что-нибудь, что я могу или должен сделать, чтобы убедиться, что базовые R-функции могут найти другие базовые R-функции, используемые в их определения, а не использование функций с тем же именем из установленных позже пакетов?

1 Ответ

0 голосов
/ 03 ноября 2018

Вы можете попробовать использовать новый конфликтующий пакет. Он разработан, чтобы избежать таких проблем, заставляя пользователя быть явным в случае какой-либо двусмысленности. Не уверен, поможет ли это в вашем конкретном случае, я не смог воспроизвести описанное вами поведение.

...