2013-08-29 6 views
10

Sto creando un pacchetto e per i metodi S3 ho esportare utilizzandoCome esportare il metodo S3 in modo che sia disponibile nello spazio dei nomi?

##' @method predict myclass 
##' @export 
predict.myclass <- function(object,...) { } 

Ora quando carico il pacchetto, poi predict lavori su un oggetto della classe myclass, ma la funzione predict.myclass non viene esportato. Nel NAMESPACE ottengo solo la voce S3method(predict,myclass). Quindi c'è un modo per esportare anche predict.myclass, in modo che l'utente possa ottenere il codice predict.myclass quando scrive (predict.myclass nella console)?

risposta

8

La mia risposta è "non farlo". L'utente può methods(predict); getAnywhere('predict.myclass') o mypackage:::predict.myclass. C'è una curva di apprendimento per l'utente, ma padroneggiare questo con il tuo metodo aiuta l'utente a navigare tutti i metodi. I motivi per non esportare il metodo sono che non è pensato per essere invocato direttamente, e ingombra il percorso di ricerca con simboli non necessari (ogni simbolo digitato al prompt, ad esempio, ls(), deve essere trovato guardando attraverso gli oggetti su tutti gli ambienti restituito da search() e i pacchetti utente come il tuo si trovano tra l'inizio della ricerca e la risoluzione dei nomi di queste funzioni di uso comune).

+0

OK, ecco un'altra domanda http://stackoverflow.com/questions/18513607/how-to-extend-s3-method-from-another-package-without-loading-the-package. Ho pensato di risolvere il mio problema con ulteriori esportazioni. – mpiktas

+2

Sei sicuro? [Secondo Hadley] (https://cran.r-project.org/web/packages/roxygen2/vignettes/namespace.html), * ogni metodo S3 deve essere esportato *. Forse fraintendere la tua risposta. –

+2

@ StéphaneLaurent l'OP ha già 'S3method (predice, myclass)', che è necessario e sufficiente; forse è ciò che Hadley intende con 'deve essere esportato'. Non è necessario né raccomandato per 'export (predict.myclass)'. –

Problemi correlati