这是一个循环问题,我不能完全正确。
我希望矩阵(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
等等......
答案 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