2016-03-30 21 views
1

Paket kurulumunda bir kez otomatik olarak bazı kurulum kodlarını (R veya C++ olarak) çalıştırmanın doğru yolu nedir? İdeal olarak, kullanıcı library(mypackage) yaptıktan sonra söz konusu kod yürütülür. Şu anda, herhangi bir şeyden önce bir kez çalıştırılması gereken işlevinde yer alıyor.R paket geliştirmede yük altında kurulum için uygun uygulama

Sadece daha fazla bağlam için, özel durumumda, glog kullanan bir harici kitaplık kullanıyorum ve bir kez ve yalnızca bir kez google::InitGoogleLogging() çalıştırmam gerekiyor. Bu biraz garip çünkü ben main den çağrılması gerekiyor olsa bile, within a library kullanıyorum çünkü kullanmaya çalışıyorum.

cevap

5

Sadece 'Yazma R Uzantıları'nı okuyun ve adayları izleyin - .onAttach() veya .onLoad(). Orada küçük şeyler yapan birçok paketim var - ve bu, C++ (Rcpp ile değil) çağrılarını yapmanın bir önemi yok.

Örnek: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) 
} 

Ben tescilli veritabanına aynı şekilde (C++ kodu kullanarak) bir kolu kurmak bazı (kamu değil) kodu vardı. Anahtar, numaralı bu kancaların paket yükü/ekinde yürütmeyi garanti etmesini sağlamaktır.

+0

Teşekkürler. Herhangi bir şey yapmayan "Yazma R Uzantıları" nda "kurulum" arıyordum. – user2476581

+0

Seni duyuyorum. Bu şeyler çok dağınık durumda - ancak bu, r-package-devel postalama listesini oluşturmamızın bir parçasıydı. Bunun gibi konular burada tartışılır ve iyi bir sinyal/gürültü oranına sahiptir. SO, bazen de çalışıyor :) –

İlgili konular