0

私はCSVファイルを持っています。そのサイズは 300MB です。このコマンドを使用して、各列で FFT を実行したい:

 apply(df,2,function(x){fft(x[!is.na(x)])})

しかし、私はこのエラーが発生します:

Error: cannot allocate vector of size 293.0 Mb
In addition: Warning messages:
1: In as.matrix.data.frame(X) :
  Reached total allocation of 1535Mb: see help(memory.size)
2: In unlist(X, recursive = FALSE, use.names = FALSE) :
  Reached total allocation of 1535Mb: see help(memory.size)
3: In unlist(X, recursive = FALSE, use.names = FALSE) :
  Reached total allocation of 1535Mb: see help(memory.size)
4: In aperm.default(X, c(s.call, s.ans)) :
  Reached total allocation of 1535Mb: see help(memory.size)
5: In aperm.default(X, c(s.call, s.ans)) :
  Reached total allocation of 1535Mb: see help(memory.size)
6: In aperm.default(X, c(s.call, s.ans)) :
  Reached total allocation of 1535Mb: see help(memory.size)
7: In aperm.default(X, c(s.call, s.ans)) :
  Reached total allocation of 1535Mb: see help(memory.size)

Windows 7-32 ビットを使用しています。このコマンドを実行するとmemory.limit()、結果は 3000 になります。

どうすれば問題を解決できますか? これ以上 RAM を購入することはできません ;)

4

1 に答える 1

0

メモリは、新しく割り当てられたベクトルに適合するだけでなく、R セッションにある他のすべてのものにも適合する必要があります。そのため、制限が問題ないように見えても、そのエラーが発生します。

for()の代わりにループを使用することをお勧めしますapply()。これはあまり洗練されていないかもしれませんが、メモリー内に一度に 1 つの列しかないため、メモリー効率が高くなります。

于 2013-09-16T15:32:06.890 に答える