首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >并行化函数poly2nb {spdep}

并行化函数poly2nb {spdep}
EN

Stack Overflow用户
提问于 2020-11-22 12:21:32
回答 1查看 98关注 0票数 0

spdep::poly2nb的文档包含以下参数项:

foundInBox:使用R代码默认为NULL,如果雪集群可用,则可能并行化,否则为长度列表(n-1),包含候选邻居的整数向量(j > i),或如果所有候选对象为(j < i) (由rgeos中的poly_findInBoxGEOS函数为干净多边形创建),则为空。

我用粗体解释了这个部分,因为如果这个参数为NULL (默认),并且注册了一个斯诺集群,那么这个函数将被并行化。我试过这样做:

代码语言:javascript
复制
cl <- parallel::makeCluster(7)
doParallel::registerDoParallel(cl)

spdep::poly2nb(squamate_dist) # squamate_dist is a large SpatialPolygonDataFrame

查看任务管理器不会显示任何并行化。并行运行此函数的正确方法是什么?此外,在提供用于参数foundInBox的列表时,是否存在将其并行化的方法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-25 16:00:57

spdep包(1.1-8)使用像spdep::set.mcOption这样的函数来设置并行计算。请参阅?spdep::set.mcOption中的示例,说明他们是如何做到的。

我无法确定这对于spdep::poly2nb是否有效,但是当我使用spdep::skaterspdep::nbcosts时,它对我有效。

在一个函数中,我这样使用它:

代码语言:javascript
复制
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
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64954046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档