3 Stimmen

.onLoad und interaktiv - unerwartetes Verhalten?

Ich habe ein Paket, das von nicht interaktiven Skripten verwendet werden soll, die über Rscript ausgeführt werden. Aber ich möchte auch in der Lage sein, es in einer interaktiven Sitzung zu laden, vor allem für Debugging-Zwecke. Wenn in einem Rscript oder einer anderen nicht-interaktiven Sitzung verwendet, möchte ich .onLoad verwenden, um einige Initialisierung zu tun, so dass ich etwas entlang der Linien von:

.onLoad <- function(libname, pkgname) {
    if ( !interactive() ) { 
        # Do some stuff 
    } else {
    # Do something slightly different
}

Das Problem ist, dass auch in einer interaktiven Sitzung, interaktive() ist FALSE innerhalb .onLoad zurückgegeben. Ich teste dies über:

.onLoad <- function(libname, pkgname) {
    print( paste( "interactive() = ", interactive(), collapse="" ) )
}

Als ich dann build() y install() (unter Verwendung von devtools) fügt die Installation die Bibliothek mit der Meldung "interactive() = FALSE" .

Irgendwelche Ideen? Weder in der Dokumentation zu .onLoad() noch zu interactive() steht etwas dazu.

Phil

2voto

Josh O'Brien Punkte 154170

Nachdem Sie die build() y install() haben Sie versucht, die Verbindung zu lösen y das Paket zu entladen und dann wieder zu laden?

Wenn ich das tue, erhalte ich Folgendes, einschließlich Ihrer .onLoad Funktion in einem Paket namens 'dummy':

 library(devtools)
 document('dummy')
 build('dummy')
 install('dummy')
 # ...
 # [1] "interactive() =  FALSE"

 detach("package:dummy", unload=T)
 library(dummy)
 # [1] "interactive() =  TRUE"

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X