在 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
以外的任何名称,它应该可以工作。
我在 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
以外的任何名称,它应该可以工作。