r - 在模型列表上使用 lapply

标签 r lapply

我已经生成了一个模型列表,并想创建一个汇总表。

例如,这里有两个模型:

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

我如何获得模型 1 而不是 X[[1L]]?

我在找一张看起来像这样的 table :
 Model                Formula       AIC
model1                  y ~ x  11.89136
model2 y ~ x + I(x^2) + I(x^3) 15.03888

最佳答案

你想要这样的东西吗?

model.list <- list(model1 = lm(y ~ x), 
                   model2 = lm(y ~ x + I(x^2) + I(x^3)))
sapply(X = model.list, FUN = AIC)

关于r - 在模型列表上使用 lapply,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15172738/

相关文章:

linux - 在 Linux 系统中安装 r 依赖项?

r - "Error in strsplit(version_with_dots, "\\. ")[[1]] : subscript out of bounds"用于更新程序功能

R比例置信区间因子

r - 将 Matlab/R 中的模型转换为 C++/Java

r - 等于某个值的 R 列名称向量

r - 分割数据帧以传递给 R 中的 sprintf

r - 仅从列表中的数据框中选择数字列

r - 如何在 R 中有效地重新编码多列?

r - data.table:使用 with=False 和转换函数/汇总函数?

R:使用 lapply 将 data.frame 中的值用作列表的子集元素