使用R中的for循环顺序填充矩阵

时间:2014-02-13 18:48:59

标签: r loops

这是一个循环问题,我不能完全正确。

我希望矩阵(w)的每一行在矩阵(mat)中重复填充时间“d”。矩阵(运行)就是这样我可以通过记录通过矩阵(w)运行的值来检查我的循环是否正常运行。


现在是我的编码:

x<-c(0,0,0,0)
y<-c(0,0,0,0)
z<-c(10,50,100,150)
a<-8
b<-4
d<-5

w<-cbind(x,y,z)

run<-matrix(0, ncol=3, nrow=d, byrow=T)
for(h in 1:d){

  mat<-matrix(0, ncol=3, nrow=a, byrow=T)
  for(j in 1:a){
    for(i in 1:b){
      mat[j,]<- w[i,]
    }
  }
  run[h,]<-mat[1,]
}

我填充矩阵(mat)的方式肯定有问题,因为我重复输入相同的值而不是顺序输入。在这种情况下,正确的语法应该是什么?


编辑:抱歉,澄清一下。我想运行我的循环5次,并且对于每次运行,创建一个矩阵(mat)(见下文),其中填充了后续的矩阵行(w)。

    V1  V2  V3
1   0   0   10
2   0   0   10
3   0   0   10
4   0   0   10
5   0   0   10


    V1  V2  V3
1   0   0   50
2   0   0   50
3   0   0   50
4   0   0   50
5   0   0   50
等等......

2 个答案:

答案 0 :(得分:3)

创建矩阵列表:

lapply(1:nrow(w), function(x) w[rep(x, each = d), ])


# [[1]]
#      x y  z
# [1,] 0 0 10
# [2,] 0 0 10
# [3,] 0 0 10
# [4,] 0 0 10
# [5,] 0 0 10
# 
# ... 
#
# [[4]]
#      x y   z
# [1,] 0 0 150
# [2,] 0 0 150
# [3,] 0 0 150
# [4,] 0 0 150
# [5,] 0 0 150

答案 1 :(得分:2)

尝试:

    mat <-  do.call("rbind", lapply(1:nrow(w), function(x) matrix(rep(w[x,],d), nrow=d, byrow=T)))
      [,1] [,2] [,3]
 [1,]    0    0   10
 [2,]    0    0   10
 [3,]    0    0   10
 [4,]    0    0   10
 [5,]    0    0   10
 [6,]    0    0   50
 [7,]    0    0   50
 [8,]    0    0   50
 [9,]    0    0   50
[10,]    0    0   50
[11,]    0    0  100
[12,]    0    0  100
[13,]    0    0  100
[14,]    0    0  100
[15,]    0    0  100
[16,]    0    0  150
[17,]    0    0  150
[18,]    0    0  150
[19,]    0    0  150
[20,]    0    0  150