2013-08-29 5 views
10

は、私はパッケージを作成していますし、S3法のために私は、私はパッケージをロードするときにそれらがクラスmyclassのオブジェクトで、その後、今predict作品をS3メソッドをエクスポートして名前空間で使用できるようにするにはどうすればよいですか?

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

を使用してエクスポートしますが、predict.myclassがエクスポートされていない機能します。 NAMESPACEでは、私はエントリS3method(predict,myclass)を得るだけです。だからpredict.myclassもエクスポートする方法があるので、ユーザはpredict.myclassをコンソールに書き込むときにpredict.myclassというコードを取得するでしょうか?

答えて

8

私の答えは「しないでください」です。ユーザーはmethods(predict); getAnywhere('predict.myclass')またはmypackage:::predict.myclassです。ユーザーの学習曲線がありますが、この方法でマスターすると、ユーザーはすべての方法をナビゲートできます。メソッドをエクスポートしない理由は、直接呼び出されることを目的としていないため、不要なシンボル(プロンプトでタイプされたすべてのシンボル、たとえばls()など)で検索パスを混乱させ、すべての環境のオブジェクトを調べる必要がありますsearch()によって返され、あなたのようなユーザーパッケージは、これらのよく使用される機能の検索と名前解決の間にあります)。

+0

OKですので、ここに別の質問がありますhttp://stackoverflow.com/questions/18513607/how-to-extend-s3-method-from-another-package-without-loading-the-package私は私の問題を追加の輸出で解決すると思った。 – mpiktas

+2

本当ですか? [Hadleyによる](https://cran.r-project.org/web/packages/roxygen2/vignettes/namespace.html)、*すべてのS3メソッドをエクスポートする必要があります*。たぶん私はあなたの答えを誤解します。 –

+2

@StéphaneLaurentOPにはすでにS3method(predict、myclass)があります。これは必要かつ十分です。おそらくハドレーが「輸出しなければならない」という意味であろう。 'export(predict.myclass)'する必要はありません。 –

関連する問題