我确实明白全局变量通常是邪恶的,我应该避免使用它们,但是如果我的包确实需要一个全局变量,那么这两种方法中哪一种更好?还有其他推荐的方法吗?
pkgEnv <- new.env()
pkgEnv$sessionId <- "xyz123"
options
options("pkgEnv.sessionId" = "xyz123")
我知道还有一些其他线程询问如何实现全局变量,但我还没有看到关于推荐哪个的讨论
最佳答案
一些包使用隐藏变量(以 .
开头的变量),比如 .Random.seed
和 .Last.value
在基础 R 中做。在你的包中你可以做
e <- new.env()
assign(".sessionId", "xyz123", envir = e)
ls(e)
# character(0)
ls(e, all = TRUE)
# [1] ".sessionId"
但是在你的包中你不需要分配
e
。您可以使用 .onLoad()
Hook 在加载包时分配变量。.onLoad <- function(libname, pkgname) {
assign(".sessionId", "xyz123", envir = parent.env(environment()))
}
有关包变量的一些很好的解释,请参阅 this question 及其答案。
关于r - 包中的全局变量 - 更推荐哪种方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28246952/