R 创建数据帧列表,显示嵌套模型列表中的AICc值
我有一个统计模型列表:R 创建数据帧列表,显示嵌套模型列表中的AICc值,r,list,lapply,R,List,Lapply,我有一个统计模型列表: ###Data import Responses <- as.data.frame(matrix(sample(0:10, 1*100, replace=TRUE), ncol=2)) colnames(Responses) <- c("A","B") Explanatories <- as.data.frame(matrix(sample(20:30, 1*100, replace=TRUE), ncol=2)) colnames(Explanator
###Data import
Responses <- as.data.frame(matrix(sample(0:10, 1*100, replace=TRUE), ncol=2))
colnames(Responses) <- c("A","B")
Explanatories <- as.data.frame(matrix(sample(20:30, 1*100, replace=TRUE), ncol=2))
colnames(Explanatories) <- c("x","y")
###Create models
Models <- list(
lm(Responses$A ~ Explanatories$x),
lm(Responses$B ~ log10(Explanatories$x)),
lm(Responses$B ~ exp(Explanatories$y))
)
数据导入
响应这只是
*apply
功能的应用。我选择了sapply
,因为如果可能的话,它会返回一个向量
Full <- sapply(Models, aicc)
Null <- sapply(Models_null, aicc)
df_aicc <- data.frame(Full, Null)
df_aicc
# Full Null
#1 269.7858 268.5274
#2 254.6533 253.0980
#3 254.8408 253.0980
这里有一个双
sapply
:
sapply(All_models, sapply, aicc)
# full res
# [1,] 267.4959 266.0534
# [2,] 251.9809 251.9127
# [3,] 253.5760 251.9127
第一个sapply
仅适用于Models
和Models\u null
。然后自然地,对于这两个列表中的每一个,我们再次希望应用sapply
,其中对于每个模型,我们将使用aicc
。这正是@Rui Barradas的解决方案,仅在一行中
当然,如果需要,之后可以将结果转换为数据帧
相反,要获取元素为上述矩阵行的列表,可以使用以下三种方法之一:
lapply(seq_along(Models), function(i)
data.frame(full = aicc(Models[[i]]), null = aicc(Models_null[[i]])))
Map(data.frame, full = lapply(Models, aicc), null = lapply(Models_null, aicc))
do.call(Map, c(data.frame, lapply(All_models, sapply, aicc)))
太好了,谢谢!那么,您将如何将df_aicc拆分为数据帧列表?所以我会有一个包含三个数据帧的列表,每个数据帧有1行(每个模型)和2列(完整和空)?@JamesWhite Done,请参见结尾。这太棒了,谢谢!但是如何为每一行创建数据帧列表呢?所以我会有一个包含三个数据帧的列表,每个数据帧有1行(每个模型)和2列(完整和空)?@JamesWhite,我会在有机会的时候更新我的答案!仅对于此类数据而言,这是一种最佳格式,但我知道您希望向每个数据帧添加一些额外的结果。@JamesWhite,添加了3个选项。
list_aicc <- split(df_aicc, row.names(df_aicc))
list_aicc
#$`1`
# Full Null
#1 269.7858 268.5274
#
#$`2`
# Full Null
#2 254.6533 253.098
#
#$`3`
# Full Null
#3 254.8408 253.098
sapply(All_models, sapply, aicc)
# full res
# [1,] 267.4959 266.0534
# [2,] 251.9809 251.9127
# [3,] 253.5760 251.9127
lapply(seq_along(Models), function(i)
data.frame(full = aicc(Models[[i]]), null = aicc(Models_null[[i]])))
Map(data.frame, full = lapply(Models, aicc), null = lapply(Models_null, aicc))
do.call(Map, c(data.frame, lapply(All_models, sapply, aicc)))