首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >r:管理循环中的内存分配

r:管理循环中的内存分配
EN

Stack Overflow用户
提问于 2017-05-11 19:19:38
回答 2查看 1.3K关注 0票数 0

首先,这个问题不是关于

错误:无法分配大小为n的向量

我将此错误视为给定的错误,并试图避免代码中的错误。

  • 我有一个3000+变量数据集和120000个案例
  • 所有列都是数字列。
  • 我需要用零重置NA
  • 如果将整个数据集的值重新分配到0,则会得到内存分配错误。
  • 因此,我将这些值一次重新分配到0列: resetNA <-函数(结果){用于(i in 1:ncol(结果)){ if(i>10) {结果,iis.na(结果,i)] <- 0}打印(头(结果))}}

在大约1000列之后,我仍然会得到内存分配错误。

现在,这对我来说很奇怪。不知怎的,内存分配在每个循环之后都在增加。然而,我不明白为什么会这样。

另外,我尝试在每个循环之后调用垃圾收集函数,我仍然得到内存分配错误。

有人能向我解释如何管理变量以避免内存分配的增量增加(毕竟,数据帧大小没有改变)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-11 23:20:17

正如在上面的注释中指出的,答案是这里在大型data.table中替换NAs的最快方法

我试过了,效果很好

票数 0
EN

Stack Overflow用户

发布于 2017-06-18 23:51:59

我学到了关于r内存使用的一个重要的一般原则。

看这个讨论。

在任何可能的情况下,避免通过数据文件循环。用伊洛普。这会将dataframe转换为列表,然后运行列表上的相关函数。然后返回一个列表。将列表转换回数据格式。

下面的示例将数字频率重新编码为一个分类变量。它速度快,不会增加内存使用量。

代码语言:javascript
运行
复制
    list1<-lapply(mybigdataframe,function(x) ifelse( x>0,"Yes","No"))
    newdf1<-as.data.frame(list1)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43923935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档