2012-11-21 74 views
1

我想模擬庫存路徑。我用22個交易日模擬了1000條路徑(1個起始值)。現在我想將它包含到我的演示文稿中,但是動畫,所以我需要png文件。循環錯誤 - plot.new尚未被調用

我想創建1000個PNG文件,從第一個股票路徑開始,然後第二個等等。

於是我開始第一個路徑,添加第二個的情節,添加第三等,所以在最後我有一個1000次的模擬情節,這裏是我的代碼:

for(i in 1:1000){ 
#jpeg(paste("1000s",i,".png",sep="")) 
plot(c(1:23),matrix[,1],type="l",ylim=c(17,24)) 
lines(c(1:23),matrix[,i],type="l",col=i) 
#dev.off() 
} 

這裏的問題是,當循環到達下一個值每增加部分消失,所以我嘗試:

plot(0,0 , xlim=c(1,23),ylim=c(17,24),xlab="",ylab="") 
for(i in 1:1000){ 
jpeg(paste("1000s",i,".png",sep="")) 
lines(c(1:23),matrix[,i],type="l",col=i) 
dev.off() 
} 

(我知道這是不是一個工作的例子,但我的問題僅僅是一個合乎邏輯的一個與循環)當我最後的代碼時,我得到以下錯誤消息:plot.new尚未被調用。

該矩陣有1000列和23行條目,這應該是1000個股票方式的模擬22個交易日。

我該如何改變錯誤不再出現?謝謝!

+1

使用CRAN包[動畫](http://cran.r-project.org/web/packages/animation/index.html),使您的生活更輕鬆 – Andrie

+2

請不要叫你的矩陣,「矩陣」。 –

回答

1

使用兩個for循環。外部循環將創建每個png/jpeg。內部會建立每個單獨的情節。

for(i in 1:1000) { 
    jpeg(paste("1000s", i, ".png", sep="")) 
    plot(0, 0, xlim=c(1,23), ylim=c(17,24), xlab="", ylab="") 

    for(j in 1:i) { 
    lines(c(1:23), matrix[, j], col=j) 
    } 
    dev.off() 
} 
+0

woooohw!多謝老兄!這真的幫助了我。 @Erik Shilts這很聰明,有兩個循環,我只是對自己感到憤怒,因爲我從來沒有想到過。 – user1690846

0

jpegplot都製作新圖。如果您要動畫構建而不是擦除,則只需在循環中調用lines。有一點,lines不需要type = 'l'。這是默認設置,命令的全部重點就是默認設置。如果你想用它繪製點,你可能會改變參數,否則就把它拋出去。