方法调度时 UseMethod 出错

Error in UseMethod when Method Dispatching

我尝试了以下代码来创建一个方法,但是当我使用名为 "tutu" 的通用函数时,我收到以下错误,而其他函数(tutu.num 和 tutu.ch)工作。请你能帮我理解错误在哪里吗?我希望 "tutu" 函数识别 class 并使用示例中的函数的适当方法 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)

使用方法错误("tutu"): 没有适用于 'tutu' 的方法应用于 class "c('integer', 'numeric')"

的对象

您需要在方法中的句点后包含完整的 class 名称。在你的例子中,变量 vot 有 class "numeric",但是你只有为 classes "num" 和 "ch" 定义的方法,两者都没有其中存在。您需要定义 tutu.numerictutu.character。也可以定义一个tutu.default来处理其他未指定的对象class:

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