r-并行函数poly2nb{spdep}



spdep::poly2nb的文档在Arguments:下包含以下条目

foundInBox:使用R代码的默认NULL,如果有雪簇可用,则可能并行,否则是具有候选邻居(j>i(的整数向量的长度列表(n-1(,或者如果所有候选都是(j<i(,则为NULL(由rgeos中用于干净多边形的poly_findInBoxGEOS函数创建(

我已经用粗体解释了该部分,因为如果该参数为NULL(默认值(并且注册了雪簇,则函数将被并行化。我试过这样做:

cl <- parallel::makeCluster(7)
doParallel::registerDoParallel(cl)
spdep::poly2nb(squamate_dist) # squamate_dist is a large SpatialPolygonDataFrame

查看任务管理器并没有显示任何并行化。并行运行此函数的正确方法是什么?此外,有没有一种方法可以在为参数foundInBox提供列表的同时将其并行化?

spdep包(1.1-8(使用类似spdep::set.mcOption的函数来设置并行计算。参见?spdep::set.mcOption中关于他们如何做到这一点的示例

我不能确认这对spdep::poly2nb有效,但在使用spdep::skaterspdep::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
}

最新更新