2013-08-29 2 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

좋아요, 그래서 여기 또 다른 질문이 있습니다. 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éphaneLaurent OP에는 이미 S3method (predict myclass)가 필요하고 충분합니다. 해들리가 '수출해야한다'는 의미 일 수도 있습니다. 'export (predict.myclass) '할 필요도없고 권장하지도 않습니다. –

관련 문제