我有一个矩阵,我想用该矩阵的选定行作为列表元素来创建一个列表。

例如这是我的矩阵

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的子集。

07-26 09:10
查看更多