我想了解混合 S3 和 S4 时 R 找到适当功能的步骤。这是一个例子:
set.seed(1)
d <- data.frame(a=rep(c('a', 'b'), each=15),
b=rep(c('x', 'y', 'z'), times=5),
y=rnorm(30))
m <- lme4::lmer(y ~ b + (1|a), data=d)
l <- lsmeans::lsmeans(m, 'b')
multcomp::cld(l)
我不完全理解执行最后一行时会发生什么。
multcomp::cld
打印UseMethod("cld")
,所以 S3 方法调度。
isS4(l)
表明这l
是一个 S4 类对象。
看起来,尽管调用了 S3 泛型,但 S3 调度系统被完全忽略了。创建一个函数print.lsmobj <- function(obj) print('S3')
(因为class(l)
是lsmobj
)并运行cld(l)
不打印"S3"
。
showMethods(lsmobj)
或showMethods(ref.grid)
(超类),不要列出任何类似于cld
函数的东西。
使用debugonce(multcomp::cld)
表明最终调用的函数cld.ref.grid
来自lsmeans
。
但是,我想知道如何实现cld.ref.grid
最终会在没有任何“技巧”的情况下调用debugonce
. 也就是说,R 执行的步骤是什么cld.ref.grid
。