В чем разница между UseMethod и .S3method ()? - PullRequest
0 голосов
/ 14 июля 2020

Я новичок в разработке пакетов. И я добавляю в пакет некоторые из моих функций, которые часто использую для личного использования ... Изучая, как разрабатывается пакет, я считаю, что типы объектов 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 я понял это вопрос можно разделить на два вопроса:

  1. В чем разница между UseMethod и .S3method();
  2. почему мой метод не экспортируется?

Ответ:

  1. как указано @MrFlick, UseMethod используется в пакетах; .S3method следует использовать только в сценариях R,

  2. Это как-то дублирует предыдущие вопросы здесь и здесь . Я представил, что экспорта 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
}
...