преобразование матрицы списков в регулярную матрицу - PullRequest
8 голосов
/ 04 октября 2009

Возьмите следующий код:

foo <- list()
foo[[1]] <- list(a=1, b=2)
foo[[2]] <- list(a=11, b=22)
foo[[3]] <- list(a=111, b=222)
result <- do.call(rbind, foo)
result[,'a']

В этом случае result[,'a'] показывает список. Есть ли более элегантный способ, чтобы result была "правильной" матрицей векторов? Я полагаю, что есть ручные способы решения этой проблемы, но мне было интересно, был ли очевидный шаг, который я пропустил.

Ответы [ 2 ]

9 голосов
/ 04 октября 2009

do.call в списках очень элегантно и быстро. Фактически do.call (rbind, my.list) однажды спас мою задницу, когда мне нужно было объединить огромный список. Это было самое быстрое решение.

Чтобы решить вашу проблему, может быть что-то вроде:

do.call(rbind, lapply(foo, unlist))


> result.2 <- do.call(rbind, lapply(foo, unlist))
> result.2
       a   b
[1,]   1   2
[2,]  11  22
[3,] 111 222
> result.2[, 'a']
[1]   1  11 111
> 
1 голос
/ 04 октября 2009

Одно из возможных решений заключается в следующем (но меня интересуют альтернативы):

new.result <- matrix(unlist(result), ncol=ncol(result), 
              dimnames=list(NULL, colnames(result)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...