从R中列表中的矩阵中提取行

时间:2014-02-09 03:57:50

标签: r list matrix extract rows

我正在尝试从R中的列表中的所有矩阵中提取行。除了循环之外,还有一种简单的方法吗?例如,

set.seed(123)
list1 <- list(replicate(4,rnorm(2)))
rep(list1,3)

此代码生成以下列表:

[[1]]
           [,1]       [,2]      [,3]       [,4]
[1,] -0.5604756 1.55870831 0.1292877  0.4609162
[2,] -0.2301775 0.07050839 1.7150650 -1.2650612

[[2]]
           [,1]       [,2]      [,3]       [,4]
[1,] -0.5604756 1.55870831 0.1292877  0.4609162
[2,] -0.2301775 0.07050839 1.7150650 -1.2650612

[[3]]
           [,1]       [,2]      [,3]       [,4]
[1,] -0.5604756 1.55870831 0.1292877  0.4609162
[2,] -0.2301775 0.07050839 1.7150650 -1.2650612

现在我想提取此列表中所有矩阵的第二行,并将其存储在另一个矩阵或列表中。有没有办法在没有循环的情况下做到这一点?

由于

3 个答案:

答案 0 :(得分:3)

或者喜欢这个?

set.seed(123)
list1 <- list(replicate(4,rnorm(2)))
l<-rep(list1,3)
lapply(l,function(x) x[2,])

答案 1 :(得分:2)

matrix(unlist(lapply(x,function (x) { x[2,]})),nrow=length(x), byrow=T)

           [,1]      [,2]       [,3]       [,4]
[1,] -0.2372892 0.8751748 -0.5452381 -0.1484494
[2,] -0.2372892 0.8751748 -0.5452381 -0.1484494
[3,] -0.2372892 0.8751748 -0.5452381 -0.1484494

答案 2 :(得分:1)

这会使用lapply提取行,并将其与rbind放在一起。

x = rep(list1,3)
do.call( rbind, lapply(x,'[',2,) )

plyr包是另一种选择

library(plyr)
laply(x,function(y) y[2,])

?"["帮助页面很有启发性。阅读之后,我意识到下面的简短代码也很有效。

laply(x,'[',2,TRUE)