2014-03-31 127 views
-1

這是我的第一個循環:如何重複循環?

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次,以找到另外10個值相同的Y [k]的一樣,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] 
    } 
} 

它說:「維打錯了」

現在我的代碼是這樣的:

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的維度(正態分佈),即時試圖設置正確的維度

+1

看看'?while'和'?repeat'。 –

+0

只需圍繞該代碼包裝另一個for循環。然而,你需要另一個尺寸y,這需要預先設定尺寸。 –

+0

我用新的循環編輯了我的帖子,但它仍然不起作用 – user3479405

回答

0

他re是一個簡單的解決方案,雖然cbind會使您的數據減慢。如果需要更多速度,則不需要指定2維,則可以將數據矩陣指定爲長度爲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)} 
+0

它工作得很好,和jbaums的一樣好。我現在將嘗試通過矩陣計算自迴歸模型,並嘗試使用這兩個答案來找到最好的方法。非常感謝你的幫助和歡呼。 – user3479405

+0

但是,請注意,在當前形式下,每次通過'n'循環時將使用相同的'e13'向量,導致'datamatrix'中的20個相同的列。 – jbaums

+0

謝謝@jbaums,我無法注意到它。所以這個解決方案對於通過矩陣計算不同的ols是沒有用的,因爲它們都是相同的。 – user3479405

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] 
    } 
} 
+0

我已經閱讀了一些葡萄牙語介紹性R文,但沒有一篇對我來說足夠詳細。非常感謝您的幫助,我會嘗試閱讀您寄給我的這些文本,使其成爲更好的程序員。乾杯 – user3479405