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結果として持っています

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

私が持っている72 など、ループで計算したものとはまったく違いますか? 誰かが私に説明できますか、なぜ違いが見られるのか、どうすればそれを解決できますか?

4

1 に答える 1

3

?append注意深く読んでください。「変更」するベクトルは最初の引数で、追加される値は 2 番目の引数です。つまり、あなたはそうするつもりappend(m1, end)であり、その逆ではありません。

関数には副作用がないため、「変更」を引用符で囲みます。つまり、実際には変更せずm1、まったく新しいベクトルを返します。したがって、失われないように割り当てる必要があります。

m1 <- append(m1, ena)

もちろん、m1ループの前に、スクリプトの先頭で初期化することを忘れないでください。

m1 <- c()

最後に、オブジェクトを繰り返し成長させると、メモリと時間がかかる可能性があることに注意してください。ただし、反復回数が多すぎない場合は問題なく動作するはずです。

于 2013-11-09T13:17:03.570 に答える