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