假设我有一些模型存储在列表中:

mods <- list()
mods[[1]] <- lm(mpg ~ disp, data = mtcars)
mods[[2]] <- lm(mpg ~ disp + factor(cyl), data = mtcars)
mods[[3]] <- lm(mpg ~ disp * factor(cyl), data = mtcars)

我想使用stats::AIC比较它们。我正在寻找从AIC(mods[[1]], mods[[2]], mods[[3]])获得的输出,但我希望将其概括为任意长的列表。我认为
do.call(AIC, mods)

可以,但是返回的内容非常冗长且无济于事。 (如果该列表已命名,除非其中一个名称是object,即AIC的第一个参数,否则将导致错误,但随后您将再次获得详细输出。)

do.call失败之后,我开始考虑eval(parse())解决方案,但我认为应该首先在这里提出。

最佳答案

summary(do.call(AIC, mods))
       df         AIC
 Min.   :3   Min.   :153.4
 1st Qu.:4   1st Qu.:159.6
 Median :5   Median :165.8
 Mean   :5   Mean   :163.1
 3rd Qu.:6   3rd Qu.:168.0
 Max.   :7   Max.   :170.2

但这可能不是您想要的。巴蒂斯特有答案:
my.aic <- function(x) {
  x <- do.call(AIC, x)
  rownames(x) <- NULL
  return(x)
}
my.aic(mods)
##   df      AIC
## 1  3 170.2094
## 2  5 165.7680
## 3  7 153.4352

这非常接近:
AIC(mods[[1]], mods[[2]], mods[[3]])
##           df      AIC
## mods[[1]]  3 170.2094
## mods[[2]]  5 165.7680
## mods[[3]]  7 153.4352

09-06 07:49