2013-08-29 1 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éphaneLaurent OP уже имеет 'S3method (pred, myclass)', что необходимо и достаточно; возможно, это то, что Хэдли означает «нужно экспортировать». Не рекомендуется и не рекомендуется «export (predict.myclass)». –

Смежные вопросы