This class implements a Zarr array. A Zarr array is stored in a node in the hierarchy of a Zarr data set. The array contains the data for an object.
Super classes
zarr_object -> zarr_node -> zarr_array
Active bindings
data_type(read-only) Retrieve the data type of the array.
shape(read-only) Retrieve the shape of the array, an integer vector.
chunking(read-only) The chunking engine for this array.
chunk_separator(read-only) Retrieve the separator to be used for creating store keys for chunks.
codecsThe list of codecs that this array uses for encoding data (and decoding in inverse order).
raw_readSet or retrieve the logical flag that indicates if data read from a Zarr store should have cells with the
fill_valueof the array be converted toNA(FALSE) or kept as-is (TRUE). The value applies to the array for all subsequent reads.
Methods
zarr_array$new()
Initialize a new array in a Zarr hierarchy. The array must already exist in the store.
Usage
zarr_array$new(name, metadata, parent, store)Arguments
nameThe name of the array.
metadataList with the metadata of the array.
parentThe parent
zarr_groupinstance of this new array, can be missing orNULLif the Zarr object should have just this array.storeThe zarr_store instance to persist data in. Ignored if
parentis specified.
zarr_array$hierarchy_nodes()
Prints the hierarchy of this array to a character string. Usually called from the Zarr object or a group to display the full group hierarchy.
zarr_array$read()
Read some or all of the array data for the array. For all
types other than logical, any data elements with the fill_value of
the Zarr data type are set to NA.
zarr_array$write()
Write data for the array. The data will be chunked, encoded
and persisted in the store that the array is using. Prior to writing,
any NA values are assigned the fill_value of the array. Note that
the logical type cannot encode NA in Zarr and any NA values are set
to FALSE.
Arguments
dataAn R vector, matrix or array with the data to write. The data in the R object has to agree with the data type and rank of the array.
selectionOptional. A
listas long as the array has dimensions where each element is a range of indices along the dimension to write. If missing, thedataobject must have the same size as the array. Ignored when the array is scalar.flushLogical, default is
TRUE. Should the chunks that have been written to be flushed to the store (TRUE), or should they be left stale for further writes to the same chunk (FALSE). Leaving the chunks stale for further writing leads to better performance when chunks are written to multiple times. Call theflush()method to persist data in stale chunks.
zarr_array$resize()
Resize the array, growing or shrinking any combination of
dimensions at either end in one pass. Existing chunk payload is never
rewritten, except for a chunk left straddling a shrinking, non-chunk-
aligned high-end boundary (its excess elements become NA).
Because the chunk grid is fixed, low can only move in whole chunks:
values are rounded outward to the nearest chunk (more space added
when growing, less removed when shrinking), so the array's origin
may land ahead of where the actual data starts; those cells read as
NA. high is not constrained this way.
zarr_array$promote()
Insert a new dimension into the array, increasing its
rank by one. This operation doesn't
grow an existing dimension, it creates one where there wasn't one before
— the typical case being promoting a 0-d scalar array to rank 1, or
giving an existing array a new leading dimension (e.g. turning a
(lat, lon) array into a (time, lat, lon) array once a second
file/time step becomes available).
Existing chunk payload is moved, never re-encoded: inserting a
size-length dimension whose chunk size equals length never changes
the relative order of elements in the encoded byte stream, for any
array rank or transpose order, because a size-1-chunk dimension never
contributes more than a single (vacuous) index to the enumeration.
So every existing chunk is just renamed with a "0" grid index
inserted at dimension. The new dimension therefore always starts out as
exactly one full chunk; grow it afterwards with resize().