Ошибка в UseMethod при отправке метода - PullRequest
1 голос
/ 16 апреля 2020

Я попробовал следующий код для создания метода, но когда я использую функцию generi c с именем "tutu", я получаю следующую ошибку, в то время как другие функции (tutu.num и tutu.ch) работают. Пожалуйста, вы можете помочь мне понять, где ошибка? Я ожидаю, что функция «Туту» распознает класс и использует соответствующий метод функции, который в примере - 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 ("пачка"): нет применимого метода для 'пачки', примененной к объекту класса "c ('целое число', 'цифра c') «

1 Ответ

3 голосов
/ 16 апреля 2020

Вам необходимо включить полное имя класса после точки в ваши методы. В вашем примере переменная vot имеет класс "цифра c", но у вас есть только методы, определенные для классов "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
...