在 R 中如何在不同的 S4 类 中定义具有相同名称的方法以进行正确的方法调度

In R how to define a method with the same name in different S4 classes for a correct method dispatching

我在 R 中为新的 S4 class 定义了一个名为 "getValues" 的方法。我的 class 和方法是:

myClass<-setClass("MyClass", 
                  slots=list(a="numeric",b="list"))

setMethod("getValues", signature ( "MyClass", "missing", "missing"),
          getValues<-function(x)
          {
            print("MyClass-getValues called")
          })

'raster' 包已经有一个名为 'getValues' 的方法,但具有不同的签名(可以在 showMethods("getValues") 中看到)。所以我认为方法调度将 select 正确的方法取决于签名。但是当我 运行:

a<-raster()
getValues(a)  #problem: this calls "getValues" of the class 'MyClass' and prints "MyClass-getValues called"

我预计会调用 RasterLayer 对象的 'getValues' 方法,但这会调用 class 'MyClass'!

的 "getValues"

哪里出错了?

错误在下面的注释行中:

myClass<-setClass("MyClass", 
                  slots=list(a="numeric",b="list"))

setMethod("getValues", signature ( "MyClass", "missing", "missing"),
          ##getValues<-function(x)##
          {
            print("MyClass-getValues called")
          })

这一行覆盖getValues的主要定义以及设置方法。将此函数称为 getValues 以外的任何名称,它应该可以工作。