Я вижу следующую идиому в функции .First.lib во многих пакетах R:
fullName <- paste("package", pkgname, sep=":")
myEnv <- as.environment(match(fullName, search()))
barepackage <- sub("([^-]+)_.*", "\\1", pkgname)
dbbase <- file.path(libname, pkgname, "R", barepackage)
rm(.First.lib, envir = myEnv)
lazyLoad(dbbase, myEnv)
if(exists(".First.lib", envir = myEnv, inherits = FALSE)) {
f <- get(".First.lib", envir = myEnv, inherits = FALSE)
if(is.function(f))
f(libname, pkgname)
else
stop(gettextf("package '%s' has a non-function '.First.lib'",
pkgname),
domain = NA)
}
Я понимаю, что функция .First.lib запускается при загрузке пакета.
Я понимаю, что приведенный выше код определяет среду для пакета и устанавливает путь, но я не понимаю, почему он ищет функцию .First.lib после явного удаления функции .First.lib.Что делает вышеупомянутую идиому столь распространенной?Это "лучшая практика", чтобы включить это в пакет R?