提高将行追加到 data.table 的性能

2024-01-11

我正在解析一堆具有类似表格数据的 XML,并希望将它们连接到一个 data.table 中以便随后进行计算。我用XML用于解析的包,大约有 10,000 个 xml 文件需要解析,每个文件内有 15-150 行(具体数字我事先不知道)。我目前的做法是:

sol <- data.table()
for(i in seq_len(length(xml_list))) {
  i.xml <- xmlParse(xml_list[[i]]
  i.component <- as.data.table(xmlToDataFrame(..))
  sol <- rbindlist(list(i.component,sol),use.names=T,fill=T)
}
sol

对于我的数据,此过程大约需要一个小时。有人可以指出我一种可以大幅提高解析性能的方法吗?

我正在考虑的可能方法是:以某种方式为较大的 data.table 预分配内存并追加行,而不是在每个步骤中重新复制整个内容?或者也许有一个更快的 XML 解析器可供我使用?或者可能同时解析列表中的 XML,而不是按顺序解析(因为它们都很相似)。


你是递归的rbinding你的成长data.table每增加一个新的小部分(10,000+ 次调用)rbindlist!)。最好创建一长串 data.tables 然后调用rbindlist once:

ll <- lapply( xml_list , function(x) as.data.table( xmlParse( x ) ) )
dt <- rbindlist( ll )

我想在这种格式下,您的大部分处理时间将花在读取和解析 xml 文件上。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

提高将行追加到 data.table 的性能 的相关文章

随机推荐