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

and*_*ewj 8 r list 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']
Run Code Online (Sandbox Code Playgroud)

在这种情况下,result[,'a']显示一个列表.是否有更优雅的方式,这result是一个"常规"的矢量矩阵?我想有一些手动的方法可以解决这个问题,但我想知道是否有一个明显的步骤,我错过了.

Vin*_*nce 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
> 
Run Code Online (Sandbox Code Playgroud)

  • 如果您自己仔细编写,可以快速管理大约4倍.下一版plyr中的`rbind.fill`将包含我最新的努力. (2认同)
  • 这是一个非常有趣的讨论; 我发现了这个比较:http://www.biostat.wustl.edu/archives/html/s-news/2000-01/msg00169.html.我对do.call的信心已被打破!谢谢哈德利. (2认同)