2013-08-29 31 views
10

tôi đang tạo ra một gói và cho các phương pháp S3 tôi xuất chúng bằng cách sửLàm cách nào để xuất phương thức S3 để nó có sẵn trong không gian tên?

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

Bây giờ khi tôi tải các gói, sau đó predict công trình trên đối tượng của lớp myclass, nhưng hoạt động predict.myclass không được xuất khẩu. Trong NAMESPACE tôi chỉ nhận được mục nhập S3method(predict,myclass). Vì vậy, có một cách để xuất khẩu predict.myclass quá, để người dùng sẽ nhận được mã số predict.myclass khi anh ta (cô) viết predict.myclass trong giao diện điều khiển?

Trả lời

8

Câu trả lời của tôi là "không làm điều đó". Người dùng có thể methods(predict); getAnywhere('predict.myclass') hoặc mypackage:::predict.myclass. Có một đường cong học tập cho người dùng, nhưng làm chủ được điều này với phương pháp của bạn sẽ giúp người dùng điều hướng tất cả các phương thức. Lý do không xuất phương thức là nó không có nghĩa là được gọi trực tiếp, và nó cắt đường dẫn tìm kiếm với các biểu tượng không cần thiết (mọi biểu tượng được gõ tại dấu nhắc, ví dụ: ls(), phải được tìm thấy bằng cách xem xét các đối tượng trên tất cả các môi trường được trả về bởi search() và các gói người dùng giống như gói của bạn đứng giữa độ bắt đầu của tìm kiếm và độ phân giải tên của các chức năng thường được sử dụng này).

+0

OK, vì vậy, đây là một câu hỏi khác http://stackoverflow.com/questions/18513607/how-to-extend-s3-method-from-another-package-without-loading-the-package. Tôi nghĩ rằng tôi giải quyết vấn đề của tôi với xuất khẩu bổ sung. – mpiktas

+2

Bạn có chắc chắn không? [Theo Hadley] (https://cran.r-project.org/web/packages/roxygen2/vignettes/namespace.html), * mọi phương thức S3 phải được xuất *. Có lẽ tôi hiểu lầm câu trả lời của bạn. –

+2

@ StéphaneLaurent OP đã có 'S3method (dự đoán, myclass)', đó là cần thiết và đủ; có lẽ đó là những gì Hadley có nghĩa là 'phải được xuất khẩu'. Không cần thiết cũng không được khuyến khích để 'export (predict.myclass)'. –