1

我尝试使用以下代码创建一个方法,但是当我使用名为“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')”的对象

4

1 回答 1

3

您需要在方法中的句点之后包含完整的类名。在您的示例中,变量vot具有类“numeric”,但您只有为类“num”和“ch”定义的方法,这两个类都不存在。您需要定义tutu.numerictutu.character。您还可以定义 atutu.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
于 2020-04-16T14:02:22.743 回答