我有一个矩阵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,但不知道怎么做。任何指向正确方向的人都会非常感激。
答案 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