R中具有焦点函数和Parlappy的光栅并行处理列表
我正在尝试并行处理光栅列表,并使用parLapply执行一个焦点函数。我想我误解了一些重要的事情。代码运行了,但是看起来它没有在我的驱动器上正确地写出焦点函数。同样,它看起来好像对列表中的第一个光栅执行了两次密度函数。。。。刚接触并行处理世界,想知道是否有关于如何处理这个问题的建议?只是一个旁注,当我运行密度函数和使用lappy的列表时,它是有效的。我如何并行处理这个R中具有焦点函数和Parlappy的光栅并行处理列表,r,parallel-processing,gis,raster,R,Parallel Processing,Gis,Raster,我正在尝试并行处理光栅列表,并使用parLapply执行一个焦点函数。我想我误解了一些重要的事情。代码运行了,但是看起来它没有在我的驱动器上正确地写出焦点函数。同样,它看起来好像对列表中的第一个光栅执行了两次密度函数。。。。刚接触并行处理世界,想知道是否有关于如何处理这个问题的建议?只是一个旁注,当我运行密度函数和使用lappy的列表时,它是有效的。我如何并行处理这个 `# Density function Density_Function <- function (raster_laye
`# Density function
Density_Function <- function (raster_layer){
weight <- focalWeight(raster_layer,90,type = "circle")
raster_name <- names(raster_layer)
short_name <- substr(raster_name,1,4)
half_output <- "X:/Path"
full_output <- paste0(half_output,short_name,"_90m.tif")
focal(raster_layer, weight, fun=sum, full_output, na.rm=TRUE, pad=TRUE, NAonly=FALSE, overwrite=TRUE)
}
#Bring in raster data and create list
roads_raster <-raster('X:/roads.tif')
pipe_raster <-raster('X:/pipes.tif')
raster_list <- list(roads_raster,pipe_raster) `
#Activate cluster
no_cores <- detectCores() - 1
cl <- makeCluster(no_cores)
#Apply function
parLapply(cl = cl, x = raster_list, fun = Density_Function)
#Close cluster
stopCluster(cl)
密度函数
密度函数我采取了不同的方法,但最终得到了我想要的。我没有使用parlappy,而是使用foreach循环遍历光栅列表,并行执行密度函数 这个博客真的很有帮助:
库(双并行)
图书馆(foreach)
#密度函数,1km圆半径
密度函数你能提供一些小数据来重现这个吗?
library(doParallel)
library(foreach)
#Density function, 1km circular radius
Density_Function_1000 <- function (raster_layer){
raster_name <- names(raster_layer)
short_name <- substr(raster_name,1,4)
weight <- focalWeight(raster_layer,1000,type = "circle")
half_output <- "X:/Path"
full_output <- paste0(half_output,short_name,"_1km.tif")
focal(raster_layer, weight, fun=sum, full_output, na.rm=TRUE, pad=TRUE, NAonly=FALSE, overwrite=TRUE)
}
#Define how many cores you want to use
UseCores <- detectCores() -1
#Register CoreCluster
cl <- makeCluster(UseCores)
registerDoParallel(cl)
#Create my list of rasters
raster_list <- list(roads_raster, cuts_raster, wells_raster, seis_raster, pipes_raster, fires_raster)
#Use foreach loop and %dopar% command to execute my density function in parallel
foreach(i = raster_list) %dopar% {
library(raster)
Density_Function_1000(i)
}
#end cluster
stopCluster(cl)