使用R并行处理XML节点

时间:2019-04-23 11:25:43

标签: r xml parallel-processing

我正在尝试通过 xml2 包和 foreach 函数来处理与R并行的XML文档。但是我收到“ node_attrs(x $ node,nsMap = ns)错误:外部指针无效”。尝试使用 clusterExport 导出树。

示例代码:

library(xml2)
library(foreach)
library(doParallel)

x <- read_xml("<x> node <yy>1</yy><yy>2</yy></x>")

nCores <- detectCores()
cl <- makeCluster(nCores)
clusterExport(cl, varlist = "x")
registerDoParallel(cl)

foreach(yy = xml_find_all(x, "/x/yy")) %dopar%
  yy

stopCluster(cl)

所以我不明白如何避免此错误...

1 个答案:

答案 0 :(得分:0)

xml2对象(通过yy传递)不能不能导出到其他R进程,因为它们持有R进程(主R会话)唯一的“外部指针”他们创建于。如果导出,则这些外部指针在后台R进程(工作程序)上完全没有用,即它们“无效”。

您可以在'A Future for R: Common Issues with Solutions'小插图的“不可导出的对象”部分中详细了解此内容。

我知道的唯一并行解决方案是使所有xml2处理对每个工作人员都是唯一的,例如

res <- foreach(file = files) %dopar% {
   x <- read_xml(file)
   lapply(xml_find_all(x, "/x/yy"), ...)
}