2013-11-09 60 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() 

最后,请注意,反复增加对象可能会耗费内存和时间。它应该工作得很好,如果你没有太多的迭代。