How to ask part of a list

Viewed 31

I would like to access all elements within models that correspond to AICv. How do I do this with the following code please? I do not want to have to write out models[[1]]$AICv, models[[2]]$AICv but would rather them all at the same time. Thank you

Model_eval_Mixed <- list(AICv=1, Probabilities = matrix(sample(9,9),3,3))
Model_eval_Tan <- list(AICv=2, Probabilities = matrix(sample(9,9),3,3))
Model_eval_Exp <- list(AICv=1.5, Probabilities = matrix(sample(9,9),3,3))
Model_eval_Gau <- list(AICv=2.5, Probabilities = matrix(sample(9,9),3,3))
#models = c(Model_eval_Tan,Model_eval_Mixed,Model_eval_Gau,Model_eval_Exp)
models = list(Model_eval_Tan=Model_eval_Tan,Model_eval_Mixed=Model_eval_Mixed,Model_eval_Exp=Model_eval_Exp,Model_eval_Gau=Model_eval_Gau)
2 Answers

You can use sapply with function [[ and the name AICv.

sapply(models, "[[", "AICv")
#  Model_eval_Tan Model_eval_Mixed   Model_eval_Exp   Model_eval_Gau 
#             2.0              1.0              1.5              2.5 

purrr::map family of functions allows to do that if you want to leverage the tidyverse approch:

library(purrr)
map_dbl(models, "AICv")
#   Model_eval_Tan Model_eval_Mixed   Model_eval_Exp   Model_eval_Gau 
#              2.0              1.0              1.5              2.5 
Related