【问题标题】:Error in UseMethod when Method Dispatching方法分派时 UseMethod 出错
【发布时间】:2020-07-29 19:16:24
【问题描述】:

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

【问题讨论】:

    标签: r r-s3 method-dispatch


    【解决方案1】:

    您需要在方法中的句点之后包含完整的类名。在您的示例中,变量vot 具有类“numeric”,但您只有为类“num”和“ch”定义的方法,它们都不存在。您需要定义tutu.numerictutu.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
    

    【讨论】:

      猜你喜欢
      • 2013-12-28
      • 1970-01-01
      • 2020-04-07
      • 1970-01-01
      • 2014-01-18
      • 1970-01-01
      • 1970-01-01
      • 2016-07-11
      • 2018-04-21
      相关资源
      最近更新 更多