Я новичок в разработке пакетов. И я добавляю в пакет некоторые из моих функций, которые часто использую для личного использования ... Изучая, как разрабатывается пакет, я считаю, что типы объектов S3 интересны ... Но я действительно новичок в S3 и объектно-ориентированных языках, и я есть сомнения в том, как использовать функции S3 ...
Достаточно ли указать
myFunc<-function(data,...){
UseMethod("myFunc",data)
}
myFunc.MyClass<-function(data){
# several lines of code here
}
?
Кажется, достаточно, когда я запускаю коды, но когда я пытаюсь «установить и перезапустить», это не работает ... Путем поиска по здесь , здесь и здесь я нашел файлы. Функция S3method ()
.S3method("summary","myClass",summary.myClass)
Что решает мою проблему. Но я не могу понять, когда это требуется.
Когда мне следует использовать .S3method()
и methods()
? В чем их отличия?
Похоже, что в примерах кода используется только один из них, но для меня, по крайней мере, для "сводной" функции, работает только тогда, когда я использую обе ... Стоит ли мне ее добавить для всех?
ОБНОВЛЕНИЕ: @MrFlick не просто ответил на мой вопрос, но и получил всю проблему, связанную с моей попыткой взглянуть на .S3method()
как на способ решения неописанной проблемы ... После комментариев @MrFlick я понял это вопрос можно разделить на два вопроса:
- В чем разница между
UseMethod
и .S3method()
; - почему мой метод не экспортируется?
Ответ:
как указано @MrFlick, UseMethod
используется в пакетах; .S3method
следует использовать только в сценариях R,
Это как-то дублирует предыдущие вопросы здесь и здесь . Я представил, что экспорта generi c (без экспорта метода, связанного с классом) было достаточно ...
@ export myFun c <- function (data, ...) {UseMethod ("myFun c ", data)} </p>
myFun c .MyClass <-function (data) {# здесь несколько строк кода} </p>
Но нет, мне нужно экспортировать оба:
@export
myFunc<-function(data,...){
UseMethod("myFunc",data)
}
@export
myFunc.MyClass<-function(data){
# several lines of code here
}