2016-03-30 12 views
1

パッケージロードごとに1回、セットアップコード(RまたはC++のいずれか)を自動的に実行する正しい方法は何ですか?理想的には、前記コードはユーザがlibrary(mypackage)を実行すると実行される。今のところ、これはsetup()関数に含まれています。これは他の関数の前に一度だけ実行する必要があります。Rパッケージ開発でのロード時のセットアップの適切な練習

私の具体的なケースでは、glogを使用する外部ライブラリを使用しており、google::InitGoogleLogging()を1回だけ実行する必要があります。 mainから呼び出されるはずですが、私はそれを使用しようとしているので、少し厄介です。within a libraryです。

答えて

5

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

私は、独自のデータベースに同じように(C++のコードを使用して)ハンドルを設定し、いくつかの(公開しない)コードを持っていました。鍵は、これらのフックは、あなたがここで欲しいものであることを保証する実行時のパッケージのロード/アタッチを保証することです。

+0

ありがとうございました。私は "R Extensionsの作成"で "セットアップ"を探していましたが、何も表示されませんでした。 – user2476581

+0

あなたの話が聞こえます。これらはあまりにも散在していますが、それはr-package-develメーリングリストを作成した理由の一部です。このような話題はそこで議論され、それは良い信号/ノイズ比を持っています。あまりにも時間で動作します:) –

関連する問題