gpt4 book ai didi

r - R 包中的 .First.lib 习惯用法

转载 作者:行者123 更新时间:2023-12-02 02:44:34 24 4
gpt4 key购买 nike

我在很多 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 包中是“最佳实践”吗?

最佳答案

这种成语已经很古老了。包应该有命名空间并使用 .onLoad、.onUnload 和 .onAttach。例如:

.onLoad <- function(libname, pkgname){
# do whatever needs to be done when the package is loaded
# some people use it to bombard users with
# messages using
packageStartupMessage( "my package is so cool" )
packageStartupMessage( "so I will print these lines each time you load it")
}

最好通过将其添加到描述文件来避免调用lazyLoad函数的全部事务:

LazyLoad: true

关于r - R 包中的 .First.lib 习惯用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4369334/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com