【发布时间】:2013-01-03 09:48:25
【问题描述】:
我想继承一个 S4 类并向该子类添加一个特殊方法。 该方法应该只适用于子类,它对我的应用程序中的任何其他类都没有意义。
setClass("MySpecies", contains="Species", ##Species is an S4 class
representation(x="numeric"))
setMethod("initialize", "MySpecies", function(.Object, x, ...){
.Object@x <- x
args <- list(...)
for(i in seq_len(length(args))){
attr(.Object, names(args)[i]) <- args[[i]]
}
.Object
})
##CalcMatrix <- function(.Object, y){
## x <- .Object@x
## matrix(x, x*2, y*3)
##}
setGeneric("CalcMatrix", function(object, y){standardGeneric("CalcMatrix")})
setMethod("CalcMatrix", "MySpecies",function(object, y){
x <- object@x
matrix(x, x*2, y*3)
})
使用setGeneric 它可以工作,但我真的必须定义一个通用函数,尽管它只用于这个对象吗?注释掉的部分有效,但是没有检查是否使用正确的参数调用函数。这样做的正确方法是什么?
提前致谢。
【问题讨论】:
-
在 S4 中,方法属于函数,而不是类。一旦你明白了这一点,你就可以更轻松地使用 S4。