内存有效地将行插入到data.table对象中?

时间:2016-06-02 11:43:39

标签: r data.table

我有一个脚本,通过使用循环逐行插入数据来创建数据表。插入是使用rbindlist()完成的。这种方法似乎变化很大,因为似乎在每次迭代中我的数据表dt都被重新分配:

tracemem(dt)
[1] "<0x2bd3d00>"
tracemem(dt <- rbindlist(list(dt, newrow)))
[1] "<0x44a7fe0>"

这篇question中的一些旧评论(约3年)提到了一个 insert()方法,但我没有在这方面找到任何更新。有没有内存有效的方法来做到这一点?

1 个答案:

答案 0 :(得分:4)

你正在循环中增长一个对象。当然,这很慢,无论是data.table都没关系。

data.table如此高效的秘诀之一是它过度分配,即为其创建期间不存在的列保留内存。你需要为行做类似的事情。在循环中创建您将需要的空行的全部数量,立即将它们绑定到data.table并在循环中通过赋值填充它们,最好使用set