首先,这个问题与
无关错误:无法分配大小为n的向量
我接受此错误作为给定,我试图避免代码中的错误
我有3000多个变量的数据集和120000个案例
所有列均为数字
我需要重置NA
如果我为整个数据集重新赋值为0,我会得到内存 分配错误。
所以我一次将值重新分配给一列:“
resetNA <- function(results)
{
for (i in 1:ncol(results))
{
if(i>10)
{
results[,i][is.na(results[,i])] <- 0
}
}
print(head(results))
}
大约1000列之后,我仍然会收到内存分配错误。
现在,这对我来说似乎很奇怪。不知何故,内存分配在每个循环后递增。但是,我不明白为什么会这样。
另外,我尝试在每次循环后调用垃圾收集功能,我仍然遇到内存分配错误。
有人可以向我解释如何管理变量以避免内存分配的增量增加(毕竟,数据帧大小没有改变)。
答案 0 :(得分:0)
如上面的评论中所述,答案是here: Fastest way to replace NAs in a large data.table
我尝试了它并且效果很好
答案 1 :(得分:0)
我已经学会了关于r内存使用的一个重要的一般原则。
尽可能避免循环数据帧。使用lapply。这会将数据帧转换为列表,然后在列表中运行相关的函数。然后它返回一个列表。将列表转换回数据帧。
以下示例将数字频率重新编码为分类变量。它速度快,不会增加内存使用量。
list1<-lapply(mybigdataframe,function(x) ifelse( x>0,"Yes","No"))
newdf1<-as.data.frame(list1)