所以,我认为这可能是一个基本问题,但在这里。想象一下,我有以下矩阵:
> str(MatrixA)
num [1:20, 1:127] 1 3 2 1 1 2 2 4 1 2 ...
基本上是一个包含20行和127列的矩阵,每个条目都是一个正整数。我还有以下向量:
> n
[1] 5 5 5 5
我想要做的是使用此向量对矩阵进行子集化。意思是,我想使用向量从矩阵中获取前五行,然后是接下来的五行,依此类推。我试图使用子集函数,但我无法使其工作(它给我一个错误,说该子集必须是逻辑的)。
任何帮助将不胜感激,谢谢!
答案 0 :(得分:2)
这是一个选项:
M <- matrix(rnorm(2 * 5), nrow = 5, ncol = 2)
n <- c(2, 1, 2)
Map(function(i, j) M[(i - j + 1):i, , drop = FALSE], cumsum(n), n)
# [[1]]
# [,1] [,2]
# [1,] -0.2080075 -0.0146956
# [2,] -1.5513436 0.2253790
#
# [[2]]
# [,1] [,2]
# [1,] 0.8447 -0.4891574
#
# [[3]]
# [,1] [,2]
# [1,] 0.4916745 1.4980913
# [2,] 0.4789787 -0.3118559
答案 1 :(得分:2)
作为一般回答,假设您有一个包含nrow
行的矩阵,并且您希望按每个k
行创建子集。然后,您可以使用以下代码:
# A sequence until `nrow` every `k` units
s <- seq(0, nrow, by = k)
# Every, . . . (5 rows)
k <- 5
# Build M1, . . ., Mk sub-matrices
for (i in 1:ceiling(nrow/k)){
assign(paste("M",i,sep ="") ,M[(s[i] + 1): s[i+1],])
}
所以,现在你只需要拨打M1
,. 。 。您的示例M4
以获取子矩阵