使用.onAttach附加包时存储变量

时间:2015-05-08 15:38:36

标签: r

我想在加载包时在包的环境中存储变量值。这是我当前的版本,但我无法在my_var之后看到/访问library(mypkg)

.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
}

请注意my_var是使用名为my_func

的程序包中的其他函数计算的

1 个答案:

答案 0 :(得分:1)

符号仅存在于该函数的范围内。更改环境不会在不同范围内重新分配。而my_var只是一个常规的&#34;变量和变量没有environments()(只有函数和公式,可能还有其他变量,但不是所有变量)。例如,内置的letters变量来自base,但environment(letters)返回NULL。

如果要在特定命名空间中分配函数外部的变量,则应使用assign()

.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"))
}