2014-10-23 2 views
0

у меня есть 3D-массив, например:Преобразование 3D-массив в список списков

arr <- array(dim = c(10, 4, 3), data = rep(rnorm(10), 120)) 
dimnames(arr) <- list(itr = NULL, chain = c("c1","c2","c3","c4"), param = c("alpha","beta","gamma")) 

, и я хотел бы, чтобы преобразовать его в список, где каждый элемент является элементом PARAM (то есть, это list будет иметь длину = 3), и каждый элемент списка - это еще один список, в котором каждый элемент является вектором длины 10 (itr), который соответствует цепочке (т. е. этот список будет иметь длину = 4).

Любая эффективная применимая функция для этого?

ответ

2

Это может работать для вас

a <- apply(arr, 3, function(x) c(as.data.frame(x))) 

Тогда мы можем посмотреть на атрибуты результата немного:

lapply(a, names) 
# $alpha 
# [1] "c1" "c2" "c3" "c4" 
# 
# $beta 
# [1] "c1" "c2" "c3" "c4" 
# 
# $gamma 
# [1] "c1" "c2" "c3" "c4" 
unique(rapply(a, length)) 
# [1] 10 
+0

работает для меня. Я подозревал, что в некоторых случаях «as.data.frame» может занять некоторое время, но это, похоже, не имеет особого значения. – thelatemail

+0

Да, мне тоже было интересно, но он прекрасно сохраняет все имена –

Смежные вопросы