Изменить иерархию списка в R
У меня есть такой список,
myList <- lapply(unique(diamonds$cut), function(x){
lst <- lapply(unique(diamonds$color), function(y){
dta <- diamonds[diamonds$cut == x & diamonds$color == y, ]
lm(price ~ carat, data = dta)
})
names(lst) <- unique(diamonds$color)
return(lst)
})
names(myList) <- unique(diamonds$cut)
Структура есть,
> str(myList, max.level=2)
List of 5
$ Ideal :List of 7
..$ E:List of 12
.. ..- attr(*, "class")= chr "lm"
..$ I:List of 12
.. ..- attr(*, "class")= chr "lm"
..$ J:List of 12
.. ..- attr(*, "class")= chr "lm"
..$ H:List of 12
.. ..- attr(*, "class")= chr "lm"
..$ F:List of 12
.. ..- attr(*, "class")= chr "lm"
..$ G:List of 12
.. ..- attr(*, "class")= chr "lm"
..$ D:List of 12
.. ..- attr(*, "class")= chr "lm"
$ Premium :List of 7
..$ E:List of 12
.. ..- attr(*, "class")= chr "lm"
..$ I:List of 12
.. ..- attr(*, "class")= chr "lm"
..$ J:List of 12
.. ..- attr(*, "class")= chr "lm"
..$ H:List of 12
.. ..- attr(*, "class")= chr "lm"
..$ F:List of 12
.. ..- attr(*, "class")= chr "lm"
..$ G:List of 12
.. ..- attr(*, "class")= chr "lm"
..$ D:List of 12
.. ..- attr(*, "class")= chr "lm"
$ Good :List of 7
..$ E:List of 12
.. ..- attr(*, "class")= chr "lm"
..$ I:List of 12
.. ..- attr(*, "class")= chr "lm"
..$ J:List of 12
.. ..- attr(*, "class")= chr "lm"
..$ H:List of 12
.. ..- attr(*, "class")= chr "lm"
..$ F:List of 12
.. ..- attr(*, "class")= chr "lm"
..$ G:List of 12
.. ..- attr(*, "class")= chr "lm"
..$ D:List of 12
.. ..- attr(*, "class")= chr "lm"
$ Very Good:List of 7
..$ E:List of 12
.. ..- attr(*, "class")= chr "lm"
..$ I:List of 12
.. ..- attr(*, "class")= chr "lm"
..$ J:List of 12
.. ..- attr(*, "class")= chr "lm"
..$ H:List of 12
.. ..- attr(*, "class")= chr "lm"
..$ F:List of 12
.. ..- attr(*, "class")= chr "lm"
..$ G:List of 12
.. ..- attr(*, "class")= chr "lm"
..$ D:List of 12
.. ..- attr(*, "class")= chr "lm"
$ Fair :List of 7
..$ E:List of 12
.. ..- attr(*, "class")= chr "lm"
..$ I:List of 12
.. ..- attr(*, "class")= chr "lm"
..$ J:List of 12
.. ..- attr(*, "class")= chr "lm"
..$ H:List of 12
.. ..- attr(*, "class")= chr "lm"
..$ F:List of 12
.. ..- attr(*, "class")= chr "lm"
..$ G:List of 12
.. ..- attr(*, "class")= chr "lm"
..$ D:List of 12
.. ..- attr(*, "class")= chr "lm"
Я хочу реструктурировать это после того, как myList
так что каждый color
воля приходит раньше cut
, Я не могу изменить код, который создает myList
, Я должен сделать это после myList
генерируется. Некоторая помощь плз.
1 ответ
Это может быть не идеально, но пока структура списка регулярна, вы можете использовать вложенный цикл for:
# get names of inner and outer lists
innerNames <- names(myList[[1]])
outerNames <- names(myList)
# creat new blank list
myList2 <- list()
# restructure
for(i in innerNames) {
for(j in outerNames)
if(j == outerNames[1]) myList2[[i]] <- myList[[j]][i]
else myList2[[i]] <- c(myList2[[i]], myList[[j]][i])
}
}