Domanda

così ho deciso di mettere le mie poche funzioni R in un pacchetto e che sto leggendo / apprendimento Writing R estensione .

si lamenta, ovviamente, su una quantità di cose che non sto facendo.

Dopo abbastanza googling, che sto sparando a qualche domanda qui, questa è una questione di stile di prova: io sto usando runIt e mi piace aventi test il più vicino possibile al codice in fase di test. in questo modo io non dimenticare le prove e ho usare i test come parte della documentazione tecnica.

Ad esempio:

fillInTheBlanks <- function(S) {
  ## NA in S are replaced with observed values

  ## accepts a vector possibly holding NA values and returns a vector
  ## where all observed values are carried forward and the first is
  ## carried backward.  cfr na.locf from zoo library.
  L <- !is.na(S)
  c(S[L][1], S[L])[1 + cumsum(L)]
}

test.fillInTheBlanks <- function() {
  checkEquals(fillInTheBlanks(c(1, NA, NA, 2, 3, NA, 4)), c(1, 1, 1, 2, 3, 3, 4))
  checkEquals(fillInTheBlanks(c(1, 2, 3, 4)), c(1, 2, 3, 4))
  checkEquals(fillInTheBlanks(c(NA, NA, 2, 3, NA, 4)), c(2, 2, 2, 3, 3, 4))
}

ma R CMD check problemi NOTA linee, come questo:

test.fillInTheBlanks: no visible global function definition for
  ‘checkEquals’

e si lamenta di me non documentare le funzioni di test.

Non voglio davvero aggiungere documentazione per le funzioni di test e io sicuramente preferirei non dover aggiungere una dipendenza al pacchetto runit.

Come pensi che dovrei guardare a questo problema?

È stato utile?

Soluzione

Dove stai mettendo il test di unità? Non si può decidere di metterli nella directory R. Un approccio più standard è di metterli sotto inst\unitTests. Dai un'occhiata alla questa pagina R-wiki per quanto riguarda la configurazione.

In alternativa, è possibile specificare quali verranno esportati i file nello spazio dei nomi, e per estensione, quali funzioni dovrebbero e non dovrebbero essere documentate.

Oltre a ciò, idealmente si dovrebbe avere i test eseguito quando R CMD CONTROLLO si chiama; che è parte del disegno. In questo caso, è necessario creare uno script di test di chiamare i tuoi test in una directory tests separata. E si dovrà caricare il pacchetto runit in quello script (ma non è necessario per renderlo una dipendenza del pacchetto).

Modifica 1:

Per quanto riguarda il tuo fallimento, perché non riesce a trovare la funzione checkEquals: vorrei cambiare si funzione di essere in questo modo:

test.fillInTheBlanks <- function() {
  require(RUnit)
  checkEquals(fillInTheBlanks(c(1, NA, NA, 2, 3, NA, 4)), c(1, 1, 1, 2, 3, 3, 4))
  checkEquals(fillInTheBlanks(c(1, 2, 3, 4)), c(1, 2, 3, 4))
  checkEquals(fillInTheBlanks(c(NA, NA, 2, 3, NA, 4)), c(2, 2, 2, 3, 3, 4))
}

In questo modo il pacchetto viene caricato quando la funzione viene chiamata o sarà informare l'utente che è necessario il pacchetto.

Modifica 2:

"Scrittura R Estensioni" :

  

Si noti che tutti gli oggetti a livello di utente in un pacchetto devono essere documentate; se un pacchetto pkg contiene oggetti a livello di utente che sono per l'uso “interno” solo, dovrebbe fornire un file pkg-internal.Rd che documenta tutti questi oggetti, e chiaramente afferma che questi non sono destinate ad essere chiamati dall'utente. Vedi per esempio le fonti per griglia pacchetto nella distribuzione R per un esempio. Si noti che i pacchetti che utilizzano oggetti interni ampiamente dovrebbero nascondere gli oggetti in uno spazio dei nomi, quando non hanno bisogno di essere documentata (vedi spazi Nome del pacchetto).

È possibile utilizzare il file pkg-internal.Rd come una possibilità, ma se si ha intenzione di avere molti oggetti nascosti, questo è di solito trattati nelle dichiarazioni dello spazio dei nomi.

Altri suggerimenti

Hai caricare il pacchetto RUnit?

La cosa migliore è probabilmente quello di guardare un pacchetto che contiene il codice esistente utilizzando RUnit.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top