2011-10-13 3 views
6

Sto sviluppando un pacchetto che fornisce una classe S3 denominata "Foo". Fornisce anche un metodo "as" per costringerlo alla classe S4 (di qualcun altro) chiamata "Bar". Il mio codice è simile al seguente:Documenta setAs() e setOldClass() con Roxygen

#' ... 
setOldClass("Foo") 

#' ... 
setAs("Foo", "SpatialPointsDataFrame", function(from) { 
    # do stuff and return a SpatialPointsDataFrame 
}) 

modificare Ho provato questo:

#' ... 
#' @name as 
#' @export 
setAs("Foo", "SpatialPointsDataFrame", function(from) { 
    # do stuff and return a SpatialPointsDataFrame 
}) 

ma poi ho questo da R CMD CHECK:

verificare se lo spazio dei nomi può essere caricato con dipendenze dichiarate ... ATTENZIONE Errore nello spazio dei nomiEsportazione (ns, esportazioni): esportazioni non definite: come Chiamate: loadNamespace -> namespaceExport Esecuzione arrestata

Uno spazio dei nomi deve essere in grado di essere caricato con solo lo spazio dei nomi di base caricato: altrimenti se lo spazio dei nomi viene caricato da un oggetto salvato, la sessione non sarà in grado di avviarsi.

Probabilmente alcune importazioni devono essere dichiarate nel file NAMESPACE.

in un file .R a parte, ho:

#' @importClassesFrom sp SpatialPointsDataFrame 

sto usando il pacchetto devtools di Hadley, quindi credo che sia roxygen2. Questo è quello che faccio:

R> document("MyPackage") 
+0

pacchetto di devtools di hadley. modificato per mostrare il miglior tentativo. – dholstius

+0

Nice edit. Sarei sorpreso se questo non ottiene risposta abbastanza presto. –

risposta

5

Il roxygen2 parser non parse setOldClass() e setAs(). Abbiamo bisogno di ottenere i tag appropriati @name.

#' "Foo" class 
#' 
#' @name Foo-class 
#' @aliases Foo 
#' @family Foo 
#' 
#' @exportClass Foo 
setOldClass("Foo") 

#' As("Foo", "SpatialPointsDataFrame") 
#' 
#' @name as 
#' @family Foo 
#' 
#' @importClassesFrom sp SpatialPointsDataFrame 
setAs("Foo", "SpatialPointsDataFrame", function(from) { 
    # do stuff and return a SpatialPointsDataFrame 
}) 

Non so sulla funzione setAs() nei dettagli, ma la funzione as() viene caricato dal pacchetto metodi. Quindi, penso che non abbiamo bisogno della voce export(as) in NAMESPACE.

+0

Non proprio un roxygen pro, e questa domanda è piuttosto vecchia, ma ... 'setAs()' crea un metodo su 'coerce', con firma' coerce, Foo, SpatilPointsDataFrame', quindi ti piacerebbe '@name coerce 'e probabilmente' @aliases coerce, Foo, SpatilPointsDataFrame-method'. Ti piacerebbe '@exportMethods coerce' per renderlo pubblico. –