xml - 提高将行附加到 data.table 的性能

标签 xml r data.table

我正在解析一堆具有类似表格数据的 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/

相关文章:

java - findViewByIdlayoutinflator 无法膨胀我的布局,使用时返回 null

带有仅运行一次的代码的 R 包(每次安装)

r - 如何在将多个列值粘贴在一起时省略 NA 值?

r - data.table `:=` 具有动态输入(现有列)和输出(新列名称)的赋值表达式

r - data.table: NA 模糊 unlist 类型

c# - 使用 C#,如何关闭格式错误的 XML 标记?

xml - 如何在 Excel 自定义功能区控件的下拉控件中设置默认值

java - MSML 的 XSD 架构中的 XML 失败 (RFC 5707)

r - 在一条线段上,找到沿线 x 个单位的点

r - 如何对按 R 中的值分组的 data.table 求和和计数