Чтобы подробнее остановиться на комментарии @alistaire, я думаю, что важной частью является использование нотации ::
, где это возможно (извините, что сделал это ответом, однако я хотел использовать некоторый код, который не вписывается в комментарий).Общая идея состоит в том, чтобы сохранить NAMESPACE
настолько чистым, насколько это возможно, и вызывать определенные функции только при необходимости, то есть использовать их временно и не загружать их постоянно в текущем сеансе.Конечно, они все еще должны быть установлены в системе для возможности их загрузки.Временная загрузка позволяет избежать конфликтов или других побочных эффектов, например, когда два разных пакета используют одно и то же имя для функций, которые, однако, выполняют разные функции.
Для иллюстрации проблемы, связанной с пространством имен, вы можете проверить приведенный ниже код, вам необходимо установить библиотеку stringi
, которую я только что использовал в качестве примера.Надеюсь, это поможет.
# load a library and check if its loaded
library(stringi)
names(sessionInfo()$otherPkgs)
# [1] "stringi"
# detach it
detach("package:stringi", unload = TRUE)
names(sessionInfo()$otherPkgs)
# NULL
# use library with :: notation, e.g., within function
my_fun <- function(x) {
stringi::stri_replace_all_fixed(x, "a", "b")
}
my_fun("aaa")
# [1] "bbb"
# check if library is loaded
names(sessionInfo()$otherPkgs)
# NULL -> it is not loaded, hence, the namespace is kept clean