例如,有两个矩阵:
A <- matrix(1:10,nrow=2)
B <- matrix(1:4,nrow=2)
A
[,1] [,2] [,3] [,4] [,5]
[1,] 1 3 5 7 9
[2,] 2 4 6 8 10
B
[,1] [,2]
[1,] 1 3
[2,] 2 4
如果我想提取A的每一行的一些元素而B的相应行提供A的元素的索引范围,有没有一种简单的方法可以做到这一点?在上面的例子中,A的第一行是c(1,3,5,7,9),我想获得第1到第3个元素(如B,c(1,3)的第一行所示) ,即c(1,3,5)。对于A的第二行,我想得到第2到第4个元素,即c(4,6,8)。所以我期望的结果是:
[[1]]
[1] 1 3 5
[[2]]
[1] 4 6 8
非常感谢。
答案 0 :(得分:1)
您可以使用lapply
对行索引进行操作来执行此操作:
lapply(seq(nrow(B)), function(idx) A[idx,B[idx,1]:B[idx,2]])
# [[1]]
# [1] 1 3 5
#
# [[2]]
# [1] 4 6 8
答案 1 :(得分:0)
您可以使用循环迭代矩阵的行:
res <- list()
for (i in 1:nrow(A)) {
res[[i]] <- A[i, B[i,1]:B[i,2]]
}
答案 2 :(得分:0)
你也可以使用Map
函数(在{1}}中类似于mapply
而不进行简化)
Map(function(i,a,b) A[i, a:b], seq.int(ncol(B)), B[,1], B[,2])
这可能更容易扩展到更多维度。