R 使用.onAttach附加包时存储变量
加载包时,我想在包的环境中存储变量的值。这是我的当前版本,但在R 使用.onAttach附加包时存储变量,r,R,加载包时,我想在包的环境中存储变量的值。这是我的当前版本,但在library(mypkg)之后,我无法查看/访问myu var: .onAttach符号仅存在于该函数的范围内。更改环境不会在不同的范围内重新分配。而my_var只是一个“常规”变量,变量没有environments()(只有函数和公式,可能还有其他变量,但不是所有变量)。例如,内置的letters变量来自base,但environment(letters)返回NULL 如果要分配将存在于函数外部特定命名空间中的变量,应使用assi
library(mypkg)
之后,我无法查看/访问myu var
:
.onAttach符号仅存在于该函数的范围内。更改环境不会在不同的范围内重新分配。而my_var
只是一个“常规”变量,变量没有environments()
(只有函数和公式,可能还有其他变量,但不是所有变量)。例如,内置的letters
变量来自base,但environment(letters)
返回NULL
如果要分配将存在于函数外部特定命名空间中的变量,应使用assign()
.o有关有效解决方案,请参见eg。我首先在.onAttach()
之外创建环境。
.onAttach <- function(libname = find.package("mypkg"), pkgname = "mypkg") {
message('on attach is called')
my_var <- my_func()
environment(my_var) <- as.environment("package:mypkg")
}
my_func <- function() {
# Do something complicated here and return complex list.
# Returning TRUE just to make it simple
TRUE
}
.onAttach <- function(libname = find.package("mypkg"), pkgname = "mypkg") {
message('on attach is called')
my_var <- my_func()
assign("my_var", my_var, envir=as.environment("package:mypkg"))
}