0

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

foundInBox:使用R代码的默认NULL,如果雪簇可用,则可能并行化,否则为长度列表(n-1)和候选邻居的整数向量(j> i),或者如果所有候选者都是(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

4

1 回答 1

2

spdep包 (1.1-8) 使用诸如spdep::set.mcOption设置并行计算之类的功能。?spdep::set.mcOption请参阅他们如何做到这一点的示例。

我无法确认这是否适用,spdep::poly2nb但在使用spdep::skateror时它对我有用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
}
于 2021-06-25T16:00:57.047 回答