我试图弄清楚NextMethod()
的工作原理。我发现的有关S3类系统的最详细的解释是在钱伯斯和哈斯提(Chats&Hastie,编辑)的统计模型(1993,Chapman&Hall)中进行的,但是我发现有关NextMethod
调用的部分有些晦涩。以下是我想理解的相关段落(第268-269页)。
我感到困惑的两点是:
一般而言,如果有人能以一种较为幸运的方式重述以上各段中的描述,我将不胜感激。
最佳答案
很难完成所有这篇文章,但是我认为这个小例子可以帮助揭开NextMethod
调度的神秘面纱。
我创建一个具有2个类属性(继承性)“第一个”和“第二个”的对象。
x <- 1
attr(x,'class') <- c('first','second')
然后,我创建一个generic
方法Cat
来打印我的对象Cate <- function(x,...)UseMethod('Cate')
我为每个类定义Cate
方法。Cate.first <- function(x,...){
print(match.call())
print(paste('first:',x))
print('---------------------')
NextMethod() ## This will call Cate.second
}
Cate.second <- function(x,y){
print(match.call())
print(paste('second:',x,y))
}
现在,您可以使用以下示例检查Cate
调用: Cate(x,1:3)
Cate.first(x = x, 1:3)
[1] "first: 1"
[1] "---------------------"
Cate.second(x = x, y = 1:3)
[1] "second: 1 1" "second: 1 2" "second: 1 3"
方法及其在调用NextMethod()时的当前值。
Cate.second(x = x, y = 1:3)