我正在尝试通过 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)
所以我不明白如何避免此错误...
答案 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"), ...)
}