我有一个矩阵,我想创建一个列表,其中该矩阵的选定行作为列表元素。
例如,这是我的矩阵
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,]
等等。
如何以优雅的方式做到这一点?
最佳答案
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
方法。
关于来自矩阵的选定行的 R_List,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31838418/