我有一个矩阵,我想用该矩阵的选定行作为列表元素来创建一个列表。
例如这是我的矩阵
my.matrix=matrix(1:100, nrow=20)
我想从此矩阵创建一个列表,使该列表的每个元素都是矩阵的一部分,并且每个部分的行索引由
my.n=c(1,2,4,3,5,5)
其中
my.n
给出应从my.matrix
提取的行数。 my.n[1]=1
表示第1行; my.n[2]=2
表示第2,3行; my.n[3]=4
表示第4至7行,依此类推。所以我列表的第一个元素应该是
my.matrix[1,]
第二
my.matrix[2:3,]
等等。
如何以优雅的方式做到这一点?
最佳答案
不太确定,但是我想您想要这样的东西...
S <- split(seq_len(nrow(my.matrix)), rep.int(seq_along(my.n), my.n))
lapply(S, function(x) my.matrix[x, , drop = FALSE])
在这里,我们通过复制
my.matrix
拆分my.n
的行号。然后,在结果列表lapply()
上使用S
将那些行号作为my.matrix
的子集。