我有一个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
如何解决我的问题?我买不到更多内存;)
答案 0 :(得分:0)
您的记忆不需要仅适合新分配的向量,也不需要适合R会话中的所有其他内容。这就是为什么即使您的限制看起来没问题也会出现错误。
我建议使用for()
循环代替apply()
。这可能不那么优雅,但内存效率更高,因为你在内存中一次只有一列