Ошибка в UseMethod при отправке метода

Я пробовал следующий код для создания метода, но когда я использую универсальную функцию с именем "tutu", я получаю следующую ошибку, в то время как другие функции (tutu.num и tutu.ch) работают. Пожалуйста, помогите мне понять, в чем ошибка? Я ожидал, что функция "tutu" распознает класс и будет использовать соответствующий метод функции, которая в примере - tutu.num. Спасибо!

tutu.num<-function(x){x*100}
tutu.ch<-function(x){paste(x,"OK")}
tutu<-function(x){
  UseMethod("tutu")
}
vot<-1:5
tutu(vot)

Ошибка в UseMethod ("tutu"): не применим метод для "tutu", примененный к объекту класса "c ('integer', 'numeric')"


person Fabio    schedule 16.04.2020    source источник


Ответы (1)


Вам необходимо включить полное имя класса после точки в ваших методах. В вашем примере переменная vot имеет класс "numeric", но у вас есть методы, определенные только для классов "num" и "ch", ни один из которых не существует. Вам нужно определить tutu.numeric и tutu.character. Вы также можете определить tutu.default для обработки объектов других неуказанных классов:

tutu           <- function(x) UseMethod("tutu")
tutu.default   <- function(x) return(NULL)
tutu.numeric   <- function(x) x * 100
tutu.character <- function(x) paste(x, "OK")

tutu(1:5)
#> [1] 100 200 300 400 500

tutu("method dispatch")
#> [1] "method dispatch OK"

tutu(data.frame(a = 1, b = 2))
#> NULL
person Allan Cameron    schedule 16.04.2020