我正在解析一堆具有类似表格式数据的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而不是顺序解析(因为它们都是相似的)。
答案 0 :(得分:2)
每增加一小部分内容rbinding
,您就会data.table
递归rbindlist
{10,000}次调用rbindlist
!)。最好创建一个很长的data.tables列表然后再调用ll <- lapply( xml_list , function(x) as.data.table( xmlParse( x ) ) )
dt <- rbindlist( ll )
:
iabRef = window.open('http://', '_blank', 'location=no,toolbar=no');
我想在这种格式中,你的大部分处理时间都花在阅读和解析xml文件上。
答案 1 :(得分:0)
您是否完成了剖析以了解时间的进展?我认为大部分时间都是将XML转换为data.table。您是否需要XML中的所有数据作为data.table的一部分?看一下你掩盖'私人数据的XML的例子会很有用,这样我们就可以理解你在做什么了。
我总是问“告诉我你想做什么,而不是你想做什么。”可能还有其他更快的方法,但没有数据就很难提出建议。