Parallelize spatial computation over the computational grids
Source:R/scale_process_mirai.R
par_grid_mirai.Rd
mirai::daemons will set the parallel backend then mirai::mirai_map
will parallelize the work in each grid. For details of the terminology
in mirai
package, refer to mirai::mirai
. This function assumes that
users have one raster file and a sizable and spatially distributed
target locations. Each thread will process
the nearest integer of $|N_g| / |N_t|$ grids
where $|N_g|$ denotes the number of grids and $|N_t|$ denotes
the number of threads.
Arguments
- grids
List of two sf/SpatVector objects. Computational grids. It takes a strict assumption that the grid input is an output of `par_pad_grid“.
- fun_dist
sf
,terra
orchopin
functions. This function should havex
andy
arguments.- ...
Arguments passed to the argument
fun_dist
.- pad_y
logical(1). Whether to filter y with the padded grid. Should be TRUE when x is where the values are calculated. Default is
FALSE
. In the reverse case, liketerra::extent
orexactextractr::exact_extract
, the raster (x) extent should be set with the padded grid.- .debug
logical(1). Default is
FALSE
. Otherwise, if a unit computation fails, the error message and theCGRIDID
value where the error occurred will be included in the output.
Value
a data.frame object with computation results.
For entries of the results, consult the documentation of the function put
in fun_dist
argument.
Note
In dynamic dots (...
), fun_dist
arguments should include
x and y where sf/terra class objects or file paths are accepted.
Virtually any sf/terra functions that accept two arguments
can be put in fun_dist
, but please be advised that
some spatial operations do not necessarily give the
exact result from what would have been done single-thread.
For example, distance calculated through this function may return the
lower value than actual because the computational region was reduced.
This would be the case especially where the target features
are spatially sparsely distributed.
See also
mirai::daemons
, mirai::mirai_map
, par_convert_f
Other Parallelization:
par_cut_coords()
,
par_grid()
,
par_hierarchy()
,
par_hierarchy_mirai()
,
par_make_grid()
,
par_merge_grid()
,
par_multirasters()
,
par_multirasters_mirai()
,
par_pad_balanced()
,
par_pad_grid()
,
par_split_list()
Author
Insang Song geoissong@gmail.com
Examples
library(sf)
library(mirai)
daemons(4, dispatcher = "process")
#> [1] 4
ncpath <- system.file("shape/nc.shp", package = "sf")
ncpoly <- sf::st_read(ncpath)
#> Reading layer `nc' from data source
#> `/usr/local/lib/R/site-library/sf/shape/nc.shp' using driver `ESRI Shapefile'
#> Simple feature collection with 100 features and 14 fields
#> Geometry type: MULTIPOLYGON
#> Dimension: XY
#> Bounding box: xmin: -84.32385 ymin: 33.88199 xmax: -75.45698 ymax: 36.58965
#> Geodetic CRS: NAD27
# sf object
ncpnts <-
readRDS(
system.file("extdata/nc_random_point.rds", package = "chopin")
)
# file path
ncelev <-
system.file("extdata/nc_srtm15_otm.tif", package = "chopin")
nccompreg <-
chopin::par_pad_grid(
input = ncpnts,
mode = "grid",
nx = 4L,
ny = 2L,
padding = 5e3L
)
#> Switch sf class to terra...
#> Switch terra class to sf...
res <-
par_grid_mirai(
grids = nccompreg,
fun_dist = extract_at,
x = ncelev,
y = ncpnts,
qsegs = 90L,
radius = 5e3L,
id = "pid"
)
#> ℹ Input is not a character.
mirai::daemons(0L)
#> [1] 0