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

我该如何解决我的问题?我不能购买更多的内存;)

4

1 回答 1

0

您的内存不仅需要适合新分配的向量,还需要适合 R 会话中的所有其他内容。这就是为什么即使您的限制看起来不错,您也会收到该错误。

我建议使用for()循环而不是apply(). 这可能不太优雅,但更节省内存,因为您一次只有一列在内存中

于 2013-09-16T15:32:06.890 回答