这个问题是一个后续问题之前的回答 https://stackoverflow.com/a/18108234/636656这就提出了一个难题。
之前答案中的可重现示例:
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
calls UseMethod
,它应该*调用anova.lm
哪个应该调用anova.lmlist
,其第一行是objects <- list(object, ...)
, but object
该表述中不存在。
我唯一能猜测的是do.call
可能不只是填充省略号,而是填充所有没有默认值的参数,并留下任何额外的内容供省略号捕获?如果是这样,记录在哪里,因为这对我来说绝对是新的!
* 这本身就是一个线索——如何UseMethod
知道打电话anova.lm
如果第一个参数未指定?没有anova.list
方法或anova.default
或类似...