【发布时间】:2013-02-16 20:09:32
【问题描述】:
我已经生成了一个模型列表,并想创建一个汇总表。
作为示例,这里有两个模型:
x <- seq(1:10)
y <- sin(x)^2
model1 <- lm(y ~ x)
model2 <- lm(y ~ x + I(x^2) + I(x^3))
和两个公式,第一个从公式的分量生成方程
get.model.equation <- function(x) {
x <- as.character((x$call)$formula)
x <- paste(x[2],x[1],x[3])
}
第二个生成模型名称作为字符串
get.model.name <- function(x) {
x <- deparse(substitute(x))
}
有了这些,我创建了一个汇总表
model.list <- list(model1, model2)
AIC.data <- lapply(X = model.list, FUN = AIC)
AIC.data <- as.numeric(AIC.data)
model.models <- lapply(X = model.list, FUN = get.model)
model.summary <- cbind(model.models, AIC.data)
model.summary <- as.data.frame(model.summary)
names(model.summary) <- c("Model", "AIC")
model.summary$AIC <- unlist(model.summary$AIC)
rm(AIC.data)
model.summary[order(model.summary$AIC),]
一切正常。 我想使用 get.model.name 将模型名称添加到表中
x <- get.model.name(model1)
这给了我想要的“model1”。
所以现在我将函数应用于模型列表
model.names <- lapply(X = model.list, FUN = get.model.name)
但现在我得到的是 X[[1L]]
而不是 model1我如何获得 model1 而不是 X[[1L]]?
我在找一张像这样的桌子:
Model Formula AIC
model1 y ~ x 11.89136
model2 y ~ x + I(x^2) + I(x^3) 15.03888
【问题讨论】:
-
您在
model.list中创建了一个未命名列表,并且您正在将此列表中的每个元素传递给get.model.name。所以,X[[1]]确实是第一次通过,它会获取您所要求的内容。 @baptiste 通过简单地创建一个命名列表并避免复杂化来克服这个问题。如果他的解决方案不是您想要的,您可能必须解释为什么要这样做。 -
感谢阿伦和巴蒂斯特。我已经添加了我想要制作的内容。
-
再次感谢。在阅读了您的 cmets 后,我刚刚将
model.list <- list(model1, model2)替换为model.list <- list(model1=model1, model2=model2),它现在运行良好。