1

パッケージの読み込みごとにセットアップ コード (R または C++) を自動的に実行する正しい方法は何ですか? 理想的には、このコードはユーザーが実行すると実行されますlibrary(mypackage)。現時点では、setup()何よりも先に一度実行する必要がある関数に含まれています。

より詳細なコンテキストとして、私の特定のケースでは、gloggoogle::InitGoogleLogging()を使用する外部ライブラリを使用しており、一度だけ実行する必要があります。から呼び出されるはずなのに、ライブラリ内で使用する必要があるため、少し厄介ですmain

4

1 に答える 1

5

「R 拡張機能の作成」を読んで、リードに従って.onAttach()ください.onLoad()。私はそこに小さなことをするパッケージをたくさん持っています - そして、あなたは単に物事を初期化する場所について尋ねているだけなので、C++へのこの呼び出し(Rcpp経由かどうか)は問題ではありません。

例: Rblpapi は接続を作成して保存します

.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)
}

同じ方法で独自のデータベースへのハンドルを (C++ コードを使用して) 設定する (公開されていない) コードがいくつかありました。重要なのは、これらのフックが、ここで必要なパッケージのロード/アタッチでの実行を保証することです。

于 2016-03-31T00:09:05.283 に答える