并行化函数 poly2nb {spdep}
parallelizing function poly2nb {spdep}
spdep::poly2nb
的文档在参数下包含以下条目:
foundInBox
: default NULL using R code, possibly parallelised if a snow cluster is available, otherwise a list of length (n-1) with integer vectors of candidate neighbours (j > i), or NULL if all candidates were (j < i) (as created by the poly_findInBoxGEOS function in rgeos for clean polygons)
我将粗体部分解释为如果此参数为 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
}
spdep::poly2nb
的文档在参数下包含以下条目:
foundInBox
: default NULL using R code, possibly parallelised if a snow cluster is available, otherwise a list of length (n-1) with integer vectors of candidate neighbours (j > i), or NULL if all candidates were (j < i) (as created by the poly_findInBoxGEOS function in rgeos for clean polygons)
我将粗体部分解释为如果此参数为 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
}