R: Как я могу предотвратить (или, по крайней мере, предвидеть) конфликты имен между кодом внутри базовых функций R и функций из позже установленных пакетов?
У меня есть пакет (tidyverse
) загружен, который переименовывает базовую функцию R (filter
).
Я использую базовую функцию R (arima.sim
) который вызывает filter
функция и возвращает ошибку от dplyr::filter.ts
,
Я могу скопировать код из arima.sim
и создать arima.sim2
, заменяя filter
с stats::filter
, который решает проблему. Но:
dplyr
функцияdplyr::filter.ts
услужливо читает:dplyr:: filter.ts function (.data,...) {bad_args (". data", "должен быть источником данных, а не объектом ts, хотите ли вы
stats::filter()
?") }
Есть ли что-то, что должно было предупредить меня об этом конфликте, кроме предупреждений при загрузке tidyverse
? Потому что, когда я получил эти предупреждения, я понятия не имел, что я буду работать filter
не прочитав в то время stats::arima.sim
,
Почему не
stats::arima.sim
находитьfilter
вstats namespace
прежде чем смотреть вdplyr namespace
? Разве пространства имен пакетов не должны предотвращать подобные вещи?Если не считать воссоздания базовых функций R с помощью
::
как описано выше, могу ли я или должен сделать что-то, чтобы базовые R-функции могли найти другие базовые R-функции, используемые в их определениях, вместо того, чтобы использовать функции с тем же именем из позже установленных пакетов?
1 ответ
Вы можете попробовать использовать новый конфликтующий пакет. Он разработан, чтобы избежать таких проблем, заставляя пользователя быть явным в случае какой-либо двусмысленности. Не уверен, что это поможет в вашем конкретном случае, я не мог воспроизвести поведение, которое вы описали.