spdep::poly2nb的文档包含以下参数项:
foundInBox:使用R代码默认为NULL,如果雪集群可用,则可能并行化,否则为长度列表(n-1),包含候选邻居的整数向量(j > i),或如果所有候选对象为(j < i) (由rgeos中的poly_findInBoxGEOS函数为干净多边形创建),则为空。
我用粗体解释了这个部分,因为如果这个参数为NULL (默认),并且注册了一个斯诺集群,那么这个函数将被并行化。我试过这样做:
cl <- parallel::makeCluster(7)
doParallel::registerDoParallel(cl)
spdep::poly2nb(squamate_dist) # squamate_dist is a large SpatialPolygonDataFrame查看任务管理器不会显示任何并行化。并行运行此函数的正确方法是什么?此外,在提供用于参数foundInBox的列表时,是否存在将其并行化的方法?
发布于 2021-06-25 16:00:57
spdep包(1.1-8)使用像spdep::set.mcOption这样的函数来设置并行计算。请参阅?spdep::set.mcOption中的示例,说明他们是如何做到的。
我无法确定这对于spdep::poly2nb是否有效,但是当我使用spdep::skater或spdep::nbcosts时,它对我有效。
在一个函数中,我这样使用它:
function_using_spdep <- function(...) {
nc <- 4L # number of cores
cores_opt <- set.coresOption(nc)
mc_opt <- set.mcOption(FALSE)
cl <- parallel::makeCluster(get.coresOption())
set.ClusterOption(cl)
on.exit({
set.coresOption(cores_opt)
set.mcOption(mc_opt)
set.ClusterOption(NULL)
parallel::stopCluster(cl)
})
# do spdep stuff
}https://stackoverflow.com/questions/64954046
复制相似问题