如何重复循环?

时间:2014-03-31 00:18:06

标签: r

这是我的第一个循环:

e13 = rnorm(122)

y = 0*e13

y[1]=2
y[2]=5

for(k in 3:length(e13)) {
    y[k]=  0.6 * y[k-1] + e13[k]
}

现在我想重复10次以找到相同y [k]的另外10个值,例如,10个不同的y[1],10个不同的y[2]等等。

然后我需要将这些数字用于其他功能。

我尝试了但是没有工作

for (i in 1:20) {
  for(k in 3:length(e13)) {
    y[k,i] = 0.6 * y[k-1,i] + e13[k,i]
  }
}

它说'#34;维数错误"

现在我的代码是这样的:

e13 = rnorm(122)
y <- array(0, c(length(e13), 20))
y[1, ] <- 2
y[2, ] <- 5
i<-c(1:20)
y[1]=2
y[2]=5

for (i in 1:20) {
  for(k in 3:length(e13)) {
    y[k,i] = 0.6 * y[k-1,i] + e13[k,i]
  }
}

但问题现在是e13的维度(正态分布),即时尝试设置正确的维度

2 个答案:

答案 0 :(得分:1)

您应该好好看看一些介绍性的R文本(例如,thisthisthis和其他人。您的问题的评论指导您自己解决这个问题。你几乎就在那里,但这就是我如何做你正在尝试的事情。

e13 <- matrix(rnorm(122*20), ncol=20)
y <- array(0, dim(e13))
y[1, ] <- 2
y[2, ] <- 5

for (i in 1:ncol(y)) {
  for(k in 3:nrow(y)) {
    y[k, i] <- 0.6 * y[k-1, i] + e13[k, i]
  }
}

答案 1 :(得分:0)

这是一个简单的解决方案,尽管cbind会降低您使用较大数据集的速度。如果需要更高的速度,则无需指定2个维度,您可以将datamatrix指定为长度为length(e13)*(how many times you want to repeat)的向量,在本例中为length(e13)*20。然后在你的第二个循环中,你将沿着数据矩阵的长度进一步放置每次重复循环。它有时更简单,如果你想使用matrix,你可以在最后把它变成一个矩阵。

datamatrix=NULL
for(n in 1:20) {
e13 = rnorm(122)

y = 0*e13

y[1]=2
y[2]=5

for(k in 3:length(e13)) {
    y[k]=  0.6 * y[k-1] + e13[k]
}
datamatrix=cbind(datamatrix,y)}