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::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
}