2013-08-29 12 views
10

tworzę pakiet i metod S3 wyeksportować je za pomocąJak wyeksportować metodę S3, aby była dostępna w przestrzeni nazw?

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

Teraz kiedy załadować paczkę, następnie predict prace na obiekcie klasy myclass, ale funkcjonować predict.myclass nie jest eksportowana. W NAMESPACE dostaję tylko wpis S3method(predict,myclass). Czy istnieje również sposób na eksportowanie predict.myclass również, aby użytkownik otrzymał kod predict.myclass, gdy on (ona) pisze predict.myclass w konsoli?

Odpowiedz

8

Moja odpowiedź brzmi "nie rób tego". Użytkownik może methods(predict); getAnywhere('predict.myclass') lub mypackage:::predict.myclass. Istnieje krzywa uczenia się dla użytkownika, ale opanowanie jej za pomocą metody pomaga użytkownikowi nawigować wszystkimi metodami. Powody, dla których nie należy eksportować metody, polegają na tym, że nie należy jej bezpośrednio wywoływać, i powoduje ona zaśmiecanie ścieżki wyszukiwania niepotrzebnymi symbolami (każdy symbol wpisany w wierszu polecenia, np. ls(), należy znaleźć, przeglądając obiekty we wszystkich środowiskach zwrócone przez search(), a pakiety użytkownika, takie jak twoje, znajdują się między początkiem wyszukiwania a rozpoznawaniem nazw tych powszechnie używanych funkcji).

+0

OK, więc tutaj jest inne pytanie http://stackoverflow.com/questions/18513607/how-to-extend-s3-method-from-another-package-without-loading-the-package. Myślałem, że rozwiązuję mój problem z dodatkowym eksportem. – mpiktas

+2

Jesteś pewien? [Według Hadleya] (https://cran.r-project.org/web/packages/roxygen2/vignettes/namespace.html), * każda metoda S3 musi zostać wyeksportowana *. Może źle rozumiem twoją odpowiedź. –

+2

@ StéphaneLaurent PO ma już 'S3method (predict, myclass)', który jest konieczny i wystarczający; może to, co Hadley rozumie przez "musi być wyeksportowane". Nie jest konieczne ani zalecane "eksportowanie (predict.myclass)". –

Powiązane problemy