Je vois l'idiome suivant dans la fonction .First.lib dans un grand nombre de paquets R:idiome .First.lib en R paquets
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)
}
Je comprends que la fonction .First.lib est exécutée lorsqu'un le paquet est chargé. Je comprends que le code ci-dessus définit un environnement pour le package et définit un chemin, mais je ne comprends pas pourquoi il recherche une fonction .First.lib après qu'il supprime explicitement la fonction .First.lib. Qu'est-ce qui rend l'idiome ci-dessus si commun? Est-ce une "meilleure pratique" d'inclure ceci dans un paquet R?
Il est très facile d'utiliser un NAMESPACE et c'est utile. Et ici, il vous donne useDynLib pour charger le code compilé –
@Romain: Merci, oui. Je suis en train d'ajouter un NAMESPACE aux deux paquets que j'ai créés. La dernière fois que j'ai parlé avec le développeur principal de végétalien, il était complètement opposé à l'ajout d'un à l'emballage. Tandis que les fichiers NAMESPACE ne sont pas requis pour que les paquets réussissent la vérification R CMD, j'ai pensé qu'il valait la peine de documenter un '.First.lib' beaucoup plus simple que celui que @JD Long a montré dans son Q. –