It is often impractical, inefficient, or impossible to perform an operation on a vector of geometries with all the geometries loaded into memory at the same time. These functions generalize the pattern of split-apply-combine to one or more handlers recycled along a common length. These functions are designed for developers rather than users and should be considered experimental.
wk_chunk_map_feature(
handleables,
fun,
vector_args = NULL,
args = NULL,
input_handler_factory = wk_writer,
output_template = NULL,
strategy = wk_chunk_strategy_feature(chunk_size = 10000)
)
A single handleable or a list()
of handleables
recycleable along a common length.
A function called like
fun(!!! transformed_handleables, !!! vector_args, !!! args)
for each chunk.
For wk_chunk_map_feature()
this must be length-stable (i.e., return
a value whose size is the recycled length of handleables and vector_args
for that chunk).
Vectorized arguments to fun
.
Non-vectorized arguments to fun
.
A function of handleable
applied to
handleable inputs. The default, wk_writer()
, will result in fun
getting called with a clone of the handleables for each chunk. Another
useful pattern is to return a single type of handler so that all
handleables
have a common type.
A vector whose subset-assign method will
get called for every chunk or NULL
to ignore the output of fun
.
A function of handleables
and n_features
such as that returned by wk_chunk_strategy_feature()
.
output_template
of the recycled common length of handleables
and vector_args
filled with values generated by fun
.
# apply a transformation or calculate a value using the data frame version
# of the geometries (but without resolving all of them at once)
wk_chunk_map_feature(
wk_linestring(xy(1:10, 1:10), rep(1:5, each = 2)),
function(features) {
coords <- wk_coords(features)
vapply(split(coords, coords$feature_id), nrow, integer(1))
},
output_template = integer()
)
#> [1] 2 2 2 2 2