C'è un codice di accesso in un pacchetto R in grado di trovare quale pacchetto o spazio dei nomi a cui appartiene?Codice nel pacchetto R: scopri * quale * pacchetto/spazio dei nomi è in
Contesto: trovo di avere un codice comune tra i pacchetti che differisce solo nel nome del pacchetto. Un comune esempio è tests/testthat.R
:
library(testthat)
library(ShiftedExcitation)
test_check("ShiftedExcitation")
Se il codice potrebbe scoprire a quale pacchetto o spazio appartiene, ho potuto evitare un certo numero di luoghi in cui il nome del pacchetto è ormai dato.
In questo momento mi definiscono una variabile nascosta che contiene il nome del pacchetto, dicono
.PKG <- "ShiftedExcitation"
e quindi utilizzare qualcosa sulla falsariga di *
library(testthat)
library(.PKG, character.only = TRUE)
test_check(.PKG)
ma io Sono curioso di sapere se esiste una soluzione più elegante.
* Non ho ottenuto questo funzionamento finora come testthat.R
viene valutato al di fuori del namespace del pacchetto. Tuttavia, funziona per definire una funzione unittest
all'interno del codice del pacchetto.
Potrebbe essere possibile utilizzare '.getNameSpace (match.call() [[1]])' che accetta il nome della funzione come argomento. probabilmente utile: http://stackoverflow.com/questions/15595478/how-to-get-the-name-of-the-calling-function-inside-the-called-routine –
'getNamespaceName (topenv())'? Ad esempio, 'debug (lm); lm(); getNamespaceName (topenv()) ' –
@MartinMorgan:' topenv' è quasi la risposta - solo che lo spazio dei nomi 'testthat' può trovarsi prima del pacakge nel percorso' search() '. – cbeleites