将列表矩阵转换为常规矩阵

时间:2009-10-03 23:53:14

标签: list r matrix

请使用以下代码:

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 个答案:

答案 0 :(得分:9)

列表上的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 :(得分:1)

一种可能的解决方案如下(但我对备选方案感兴趣):

new.result <- matrix(unlist(result), ncol=ncol(result), 
              dimnames=list(NULL, colnames(result)))
相关问题