2013-08-29 21 views
10

我創建一個包和S3方法我導出它們使用如何導出S3方法,使其在命名空間中可用?

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

現在,當我加載包,然後predict作品的類myclass的對象,但功能predict.myclass不出口。在NAMESPACE中,我只能得到條目S3method(predict,myclass)。那麼是否還有辦法導出predict.myclass,以便用戶在控制檯中寫predict.myclass時可以獲得代碼predict.myclass

回答

8

我的回答是「不這樣做」。用戶可以methods(predict); getAnywhere('predict.myclass')mypackage:::predict.myclass。用戶有一個學習曲線,但用你的方法掌握這一點有助於用戶瀏覽所有方法。不導出該方法的原因是它不是直接調用,而是用不必要的符號來混淆搜索路徑(在提示符處鍵入的每個符號,例如ls(),都必須通過查看所有環境中的對象來找到由search()返回,像您這樣的用戶包位於搜索開始和這些常用函數的名稱解析之間)。

+0

好的,所以這裏是另一個問題http://stackoverflow.com/questions/18513607/how-to-extend-s3-method-from-another-package-without-loading-the-package。我認爲我解決了我的問題,增加了出口。 – mpiktas

+2

你確定嗎? [根據哈德利](https://cran.r-project.org/web/packages/roxygen2/vignettes/namespace.html),*每個S3方法必須導出*。也許我誤解你的答案。 –

+2

@StéphaneLaurentOP已經有了'S3method(predict,myclass)',這是必要和充分的;也許這就是哈德利所說的「必須出口」。既不需要也不推薦'export(predict.myclass)'。 –