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

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

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

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

  1. dplyr функция dplyr::filter.ts услужливо читает:

    dplyr:: filter.ts function (.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 ответ

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

Другие вопросы по тегам