2013-11-09 55 views
0

向列表(或向量)添加新值時遇到問題。這是我的代碼:使用循環時的不同結果

window<-4 
n<-1 

normaltimeseries<-c(1,2,3,1,2,3,3,2,1,1,2,3,3,1,2,1) 

energie <- function(x) {(Re(fft(x)))^2+(Im(fft(x)))^2} 


normaltimeseries<-matrix(normaltimeseries) 


while(n+window <= length(normaltimeseries[,1])) 
{ 
    ena<-sum(energie(normaltimeseries[n:(n+window-1),1])) 
    append(ena,m1) 
    n<-n+1 
} 
m1 

,我有這樣的結果:

92 92 92 60 40 60 92 104 92 92 72 60 

如果我想這沒有任何像這樣的循環:

ena<-sum(energie(normaltimeseries[1:4,1])) 

我已經60作爲resualt

ena<-sum(energie(normaltimeseries[2:5,1])) 

我有72 等等,它們與我在循環中計算出的總數有什麼不同?有人可以解釋我,爲什麼我看到了差異,我該如何解決這個問題?

回答

3

仔細閱讀?append。 「修改」的矢量是第一個參數,要附加的值是第二個參數。所以你打算做append(m1, end)而不是其他方式。

我在「修改」處引用引號是因爲該函數沒有副作用,即它沒有真正修改m1但返回一個全新的向量。所以你要分配它,所以它不會丟失:

m1 <- append(m1, ena) 

當然,不要忘了在你的腳本的頂部初始化m1,在循環之前:

m1 <- c() 

最後,請注意,反覆增加對象可能會耗費內存和時間。它應該工作得很好,如果你沒有太多的迭代。