r - 包中的全局变量 - 更推荐哪种方法?

标签 r packages

我确实明白全局变量通常是邪恶的,我应该避免使用它们,但是如果我的包确实需要一个全局变量,那么这两种方法中哪一种更好?还有其他推荐的方法吗?

  • 使用对包可见的环境
    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/

    相关文章:

    r - RCurl或XML挑战: Read Pastebin into R

    r - ..1 和 ..2 在 R 中代表什么?

    android - 在为其他人开发应用程序时,建议使用哪个程序包名称将其上传到商店?

    package - 无法加载在 share\octave\packages 中可用但未在 share\octave\octave_packages 中列出的包

    r - 为什么 R data.table 不能很好地支持 Windows 上的非 ASCII 键

    python - 向 pandas 数据框添加一个新列,并用 2 个值填充它,直到该列的末尾

    r - 在 R data.table 中创建参数化函数

    r - Rscript:没有名为…的软件包?

    r - R包:当我的导出函数未从其他包中显式调用函数,而子例程执行时,“import”的工作方式

    module - D 开发流程