使用循环时的结果不同

时间:2013-11-09 12:56:17

标签: r

向列表(或向量)添加新值时遇到问题。这是我的代码:

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 等等,这与我在循环中计算的完全不同?可以有人解释我,为什么我看到了差异,我该如何解决?

1 个答案:

答案 0 :(得分:3)

仔细阅读?append。 “修改”的向量是第一个参数,要追加的值是第二个参数。所以你打算做append(m1, end),而不是相反。

我在“修改”周围加上引号,因为该函数没有副作用,即它不会真正修改m1但返回一个全新的向量。因此,您需要分配它,以免丢失:

m1 <- append(m1, ena)

当然,不要忘记在循环之前初始化脚本顶部的m1

m1 <- c()

最后,要注意迭代地增长对象可能是内存耗时。如果你没有太多的迭代,它应该可以正常工作。