这是我的第一个循环:
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的维度(正态分布),即时尝试设置正确的维度
答案 0 :(得分:1)
您应该好好看看一些介绍性的R文本(例如,this,this,this和其他人。您的问题的评论指导您自己解决这个问题。你几乎就在那里,但这就是我如何做你正在尝试的事情。
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)}