我正在解析一堆具有类似表格数据的 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
,每个新的小添加(对rbindlist
的10,000 多次调用!)。最好创建一长串 data.tables,然后调用 rbindlist
一次:
ll <- lapply( xml_list , function(x) as.data.table( xmlParse( x ) ) )
dt <- rbindlist( ll )
我想在这种格式下,您的大部分处理时间将花费在读取和解析 xml 文件上。
关于xml - 提高将行附加到 data.table 的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30977355/