我写了一个s4类,并覆盖了“ ==”-operator with

setMethod("==",
      signature=c(e1="CAttribute", e2="CAttribute"),
      definition=function(e1, e2)
  {
    return(getName(e1) == getName(e2))
  }
)


如果我现在要测试CAttribute的实例是否在CAttributes列表中,

a1 <- new("CAttribute", name="a1")
l <- list(new("CAttribute", name="a1"), new("CAttribute", name="a2"))
a1 %in% l


我收到以下错误

Error in match(x, table, nomatch = 0L) :
  'match' requires vector arguments


我做错了什么,我该如何测试s4对象列表中是否存在与某个“ ==-运算符”相对应的特定对象?

最佳答案

如果不覆盖%in%,它将使用在help中可以找到的%in%的当前实现:

"%in%" <- function(x, table) match(x, table, nomatch = 0) > 0


match函数不需要类CAttribute的对象,这可以解释您的错误。

09-11 20:35