我正在用R开发一个包.我有一堆函数,其中一些需要一些全局变量.如何管理包中的全局变量?
我已经阅读了一些关于环境的内容,但我不明白它是如何工作的,如果这就是解决问题的方法.
在我的一个包中,我使用.onAttach钩子来运行一些R代码,然后使用它assign来使值可用作包变量之一.我这样做是因为variable取决于某个文件的内容,它可以在一个会话和另一个会话之间切换.我使用的代码如下:
.onAttach <- function(libname, pkgname) {
variable <- some_function()
assign("variable", variable, envir = as.environment("package:MyRPackage"))
}
Run Code Online (Sandbox Code Playgroud)
当我附上包装时library(MyRpackage)我可以使用variable.
然而,不可能做类似的事情MyRPackage::variable(除非我已经附上了包library(MyRpackage).
我知道这是因为我应该将该代码放在.onLoad钩子中,但是我无法进行赋值以使其工作.
我试过了
.onLoad <- function(libname, pkgname) {
variable <- some_function()
assign("variable", variable, envir = as.environment("namesoace:MyRPackage"))
}
Run Code Online (Sandbox Code Playgroud)
和
.onLoad <- function(libname, pkgname) {
variable <- some_function()
assign("variable", variable, envir = asNamespace("MyRPackage"))
}
Run Code Online (Sandbox Code Playgroud)
但是当我在MyRPackage:::variable不使用library附加包的情况下运行时,它们都会失败并出现一些错误.
在.onLoad钩子中进行赋值的正确方法是什么?