这个问题是对之前提出的一个谜题的回答的后续问题。
上一个答案的可重现示例:
Models <- list( lm(runif(10)~rnorm(10)),lm(runif(10)~rnorm(10)),lm(runif(10)~rnorm(10)) )
lm1 <- lm(runif(10)~rnorm(10))
library(functional)
# This works
do.call( Curry(anova, object=lm1), Models )
# But so does this
do.call( anova, Models )
do.call(anova, Models)
正如@Roland 指出的那样,问题是为什么工作正常?
方差分析的签名是anova(object, ...)
anova
call UseMethod
,应该* callanova.lm
应该 call anova.lmlist
,其第一行是objects <- list(object, ...)
,但object
在该公式中不存在。
我唯一可以推测的是,它do.call
可能不仅填充省略号,而且填充所有参数而没有默认值,并为省略号留下任何额外内容?如果是这样,那记录在哪里,因为它对我来说绝对是新的!
* 这本身就是一个线索——如果第一个参数未指定,如何UseMethod
知道调用?anova.lm
没有anova.list
方法anova.default
或类似的...