通过索引扩展预分配列表时内存泄漏

时间:2018-02-15 15:21:23

标签: r

我有一个预先分配的列表,我在我的代码中使用:

slopeList <-  vector('list',20)

当我在Rconsole中复制/粘贴代码时,我注意到我可以添加更多代码 然后分配记录,没有任何错误或警告。

for (i in (200:220)) slopeList[[i]]<- 0

运行时没有错误也没有警告。在相反的情况下手动输入以下行:

slopeList[[230]]

Error in slopeList[[230]] : subscript out of bounds 所以FOR循环可能会造成内存泄漏。

我是否可以在程序中设置一个标志来生成警告或错误,即使循环访问该列表也是如此?

1 个答案:

答案 0 :(得分:0)

行为差异的原因是你的for循环内部正在调用函数`[[<-`(它支持分配索引的长度超过列表初始化的长度)而在循环你调用`[[`(抛出错误,因为该元素不存在)。

当发生此类行为时,有很多方法可以抛出错误或警告,例如,您可以实现自己的方法来处理属于某个&#34;类的变量&#34;以不同方式处理作业。最简单的方法是确保在循环中引用slopeList,例如for (i in seq_along(slopeList)) {...}永远不会超过列表的长度