我有一个包含10,000行和2列的2D数组A.
在第一个实例中,我只想使用数组A的前200行。我做了以下操作: New_array = A [A(1:200),]
每次我想将行数增加50。 即在第二次迭代中,我希望能够访问250行矩阵A,第三次迭代300,依此类推,直到达到矩阵的原始大小。
我知道我必须创建一个for循环,但我很挣扎。任何帮助将受到高度赞赏
答案 0 :(得分:1)
seq
功能允许您指定序列中的间隔,如@ d.b的评论中所示。
seq(0, 20, by = 5)
[1] 0 5 10 15 20
然后可以使用seq
的输出来驱动循环。这里i
用作每次迭代中序列的端点。
for ( i in seq(5, 20, by = 5) ) {
print(1:i)
}
[1] 1 2 3 4 5
[1] 1 2 3 4 5 6 7 8 9 10
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
应用于您的示例,序列可用于矩阵的子集
# Example matrix
m <- 10000
n <- 2
A <- matrix(1:(m*n), ncol = n)
head(A)
[,1] [,2]
[1,] 1 10001
[2,] 2 10002
[3,] 3 10003
[4,] 4 10004
[5,] 5 10005
[6,] 6 10006
# Iterate with a loop
jump <- 5 # I'm using 5 instead of 50
for ( i in seq(jump, m, by = jump) ) {
print(paste("i =", i))
print( A[1:i, ] ) # subset the matrix
if ( i > 15 ) break # limiting the output for readability
}
[1] "i = 5"
[,1] [,2]
[1,] 1 10001
[2,] 2 10002
[3,] 3 10003
[4,] 4 10004
[5,] 5 10005
[1] "i = 10"
[,1] [,2]
[1,] 1 10001
[2,] 2 10002
[3,] 3 10003
[4,] 4 10004
[5,] 5 10005
[6,] 6 10006
[7,] 7 10007
[8,] 8 10008
[9,] 9 10009
[10,] 10 10010
[1] "i = 15"
[,1] [,2]
[1,] 1 10001
[2,] 2 10002
[3,] 3 10003
[4,] 4 10004
[5,] 5 10005
[6,] 6 10006
[7,] 7 10007
[8,] 8 10008
[9,] 9 10009
[10,] 10 10010
[11,] 11 10011
[12,] 12 10012
[13,] 13 10013
[14,] 14 10014
[15,] 15 10015
[1] "i = 20"
[,1] [,2]
[1,] 1 10001
[2,] 2 10002
[3,] 3 10003
[4,] 4 10004
[5,] 5 10005
[6,] 6 10006
[7,] 7 10007
[8,] 8 10008
[9,] 9 10009
[10,] 10 10010
[11,] 11 10011
[12,] 12 10012
[13,] 13 10013
[14,] 14 10014
[15,] 15 10015
[16,] 16 10016
[17,] 17 10017
[18,] 18 10018
[19,] 19 10019
[20,] 20 10020