R:将矩阵转换为子矩阵列表

时间:2015-05-12 12:44:44

标签: r matrix

我有一个矩阵m,我想把它转换成一个列表l,其中每个列表项都是m的子矩阵,由x行m组成。

像这样:

m <- matrix(sample(15,60,T),12)
l <- list(m[1:3,],m[4:6,],m[7:9,],m[10:12,])

我确定这是一个简单且更通用的解决方案,但仍然是R的新手,我无法找到它。我想过使用lapply,但不知道怎么做。任何指向正确方向的人都会非常感激。

2 个答案:

答案 0 :(得分:2)

分割功能在这里非常有用:

lapply(split(m,rep(c(1:3),each=4)),matrix,nrow=4)

或更一般地说,

n = 3
lapply(split(m,rep(c(1:n),each=(nrow(m)/n))),matrix,nrow(m)/n)

答案 1 :(得分:1)

按照您在问题中的操作,使用Map迭代开头索引并完成索引:

p = 3
Map(function(u,v) m[u:v,], seq(1,nrow(m),p), seq(p,nrow(m),p))

#[[1]]
#     [,1] [,2] [,3] [,4] [,5]
#[1,]   14    8    5   10    9
#[2,]   10    4    5    7    8
#[3,]    3    3    6    7    3

#[[2]]
#     [,1] [,2] [,3] [,4] [,5]
#[1,]    4    8   12    1    1
#[2,]    4    2   13    1   11
#[3,]    6    2    4    1   12

#[[3]]
#     [,1] [,2] [,3] [,4] [,5]
#[1,]   11   12    8    5    7
#[2,]    3    6    2    6    2
#[3,]   13   13   10    7   12

#[[4]]
#     [,1] [,2] [,3] [,4] [,5]
#[1,]    9    7   12    8    9
#[2,]   10    8   13   14   13
#[3,]   12    6   11    4   11