我确实理解通常全局变量是邪恶的,我应该避免它们,但如果我的包确实需要一个全局变量,这两种方法中的哪一种更好?还有其他推荐的方法吗?
使用包可见的环境
pkgEnv <- new.env()
pkgEnv$sessionId <- "xyz123"
Run Code Online (Sandbox Code Playgroud)运用 options
options("pkgEnv.sessionId" = "xyz123")
Run Code Online (Sandbox Code Playgroud)我知道有一些其他线程询问如何实现全局变量,但我还没有看到关于推荐哪一个的讨论
有些软件包使用隐藏变量(即用开头的变量.),喜欢.Random.seed和.Last.value做基础R.在你的包,你可以做
e <- new.env()
assign(".sessionId", "xyz123", envir = e)
ls(e)
# character(0)
ls(e, all = TRUE)
# [1] ".sessionId"
Run Code Online (Sandbox Code Playgroud)
但是在你的包中你不需要分配e.您可以使用.onLoad()钩子在加载包时分配变量.
.onLoad <- function(libname, pkgname) {
assign(".sessionId", "xyz123", envir = parent.env(environment()))
}
Run Code Online (Sandbox Code Playgroud)
有关包变量的一些很好的解释,请参阅此问题及其答案.