R 包开发中加载时设置的正确做法

Proper practice for setup upon load in R package development

每次加载包时自动 运行 设置一些设置代码(R 或 C++)的正确方法是什么?理想情况下,所述代码将在用户执行 library(mypackage) 后执行。现在,它包含在 setup() 函数中,需要先 运行 一次。

只是为了了解更多上下文,在我的具体情况下,我正在使用一个使用 glog and I need to execute google::InitGoogleLogging() once and only once. It's slightly awkward because I'm trying to use it within a library 的外部库,因为我必须这样做,即使它应该从 main 调用。

只需阅读 'Writing R Extensions' 并按照线索进行操作 - 它是 .onAttach().onLoad()。我有很多包在那里做一些小事——调用 C++(通过或不通过 Rcpp)并不重要,因为你只是询问在哪里初始化东西。

示例: Rblpapi creates a connection and stores it

.pkgenv <- new.env(parent=emptyenv())

.onAttach <- function(libname, pkgname) {
    if (getOption("blpAutoConnect", FALSE)) {
        con <- blpConnect()
        if (getOption("blpVerbose", FALSE)) {
            packageStartupMessage(paste0("Created and stored default connection object ",
                                         "for Rblpapi version ",
                                         packageDescription("Rblpapi")$Version, "."))
        }
    } else {
        con <- NULL
    }
    assign("con", con, envir=.pkgenv)
}

我有一些(不是 public)代码以相同的方式设置专有数据库的句柄(使用 C++ 代码)。关键是这些挂钩 保证你 在包加载/附加时执行,这就是你想要的。