R_List来自选定的矩阵行

时间:2015-08-05 16:49:34

标签: r list matrix

我有一个矩阵,我想创建一个列表,其中列表元素的选定行。

例如,这是我的矩阵

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,]

等等。

如何以优雅的方式做到这一点?

2 个答案:

答案 0 :(得分: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与这些行号一起使用。

答案 1 :(得分:3)

end <- cumsum(my.n)
start <- c(1,(end+1)[-length(end)])
mapply(function(a,b) my.matrix[a:b,,drop=F], start, end)

mapply从两个向量中获取第一个参数并将它们应用于函数。它移动到每个向量的第二个元素并继续通过每个向量。此行为适用于此应用程序创建所述子集列表。感谢@nongkrong采用mapply方法。