【发布时间】:2010-12-06 17:50:35
【问题描述】:
我在很多 R 包的 .First.lib 函数中看到以下成语:
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 包中是否是“最佳实践”?
【问题讨论】: