writeHDF5Array {HDF5Array} | R Documentation

## Write an array-like object to an HDF5 file

### Description

A function for writing an array-like object to an HDF5 file.

### Usage

    writeHDF5Array(x, filepath=NULL, name=NULL,
                      H5type=NULL, chunkdim=NULL, level=NULL, as.sparse=NA,
                      with.dimnames=FALSE, verbose=NA)

### Arguments

`x` | The array-like object to write to an HDF5 file. If `x` is a DelayedArray object, `writeHDF5Array` realizes it on disk, that is, all the delayed operations carried by the object are executed while the object is written to disk. See "On-disk realization of a DelayedArray object as an HDF5 dataset" section below for more information.
`filepath` | `NULL` or the path (as a single string) to the (new or existing) HDF5 file where to write the dataset. If `NULL`, then the dataset will be written to the current HDF5 dump file i.e. to the file whose path is `getHDF5DumpFile`.
`name` | `NULL` or the name of the HDF5 dataset to write. If `NULL`, then the name returned by `getHDF5DumpName` will be used.
`H5type` | The H5 datatype to use for the HDF5 dataset to be written to the HDF5 file is automatically inferred from the type of `x` (`type(x)`). Advanced users can override this by specifying the H5 datatype they want via the `H5type` argument. See `rhdf5::h5const("H5T")` for a list of available H5 datatypes. See References section below for the link to the HDF Group's Support Portal where H5 predefined datatypes are documented. A typical use case is to use a datatype that is smaller than the automatic one in order to reduce the size of the dataset on disk. For example you could use `"H5T_IEEE_F32LE"` when `type(x)` is `"double"` and you don't care about preserving the precision of 64-bit floating-point numbers (the automatic H5 datatype used for `"double"` is `"H5T_IEEE_F64LE"`). Another example is to use `"H5T_STD_U16LE"` when `x` contains small non-negative integer values like counts (the automatic H5 datatype used for `"integer"` is `"H5T_STD_I32LE"`).
`chunkdim` | The dimensions of the chunks to use for writing the data to disk. By default (i.e. when `chunkdim` is set to `NULL`), `getHDF5DumpChunkDim(dim(x))` will be used. See `?getHDF5DumpChunkDim` for more information. Set `chunkdim` to 0 to write unchunked data (a.k.a. contiguous data).
`level` | The compression level to use for writing the data to disk. By default, `getHDF5DumpCompressionLevel()` will be used. See `?getHDF5DumpCompressionLevel` for more information.
`as.sparse` | Whether the data in the returned HDF5Array object should be flagged as sparse or not. If set to `NA` (the default), then `is_sparse(x)` is used. IMPORTANT NOTE: This only controls the `as.sparse` flag of the returned HDF5Array object. See man page of the `HDF5Array()` constructor for more information. In particular this does NOT affect how the data will be laid out to the HDF5 file in any way (HDF5 doesn't natively support sparse storage at the moment). In other words, the data will always be stored in a dense format, even when `as.sparse` is set to `TRUE`.
`with.dimnames` | By default the dimnames on `x` are not written to the HDF5 file. Set `with.dimnames` to `TRUE` to also have them written. Note that `h5writeDimnames` is used internally to write the dimnames to disk. Setting `with.dimnames` to `FALSE` and calling `h5writeDimnames` is another way to write the dimnames on `x` to disk that gives more control. See `?h5writeDimnames` for more information.
`verbose` | Whether block processing progress should be displayed or not. If set to `NA` (the default), verbosity is controlled by `DelayedArray:::get_verbose_block_processing()`. Setting `verbose` to `TRUE` or `FALSE` overrides this.

### Details

Please note that, depending on the size of the data to write to disk and the performance of the disk, `writeHDF5Array()` can take a long time to complete. Use `verbose=TRUE` to see its progress.

Use `setHDF5DumpFile` and `setHDF5DumpName` to control the location of automatically created HDF5 datasets.

Use `setHDF5DumpChunkLength`, `setHDF5DumpChunkShape`, and `setHDF5DumpCompressionLevel`, to control the physical properties of automatically created HDF5 datasets.

### Value

An HDF5Array object pointing to the newly written HDF5 dataset on disk.

### On-disk realization of a DelayedArray object as an HDF5 dataset

When passed a DelayedArray object, `writeHDF5Array` realizes it on disk, that is, all the delayed operations carried by the object are executed on-the-fly while the object is written to disk. This uses a block-processing strategy so that the full object is not realized at once in memory. Instead the object is processed block by block i.e. the blocks are realized in memory and written to disk one at a time.

In other words, `writeHDF5Array(x, ...)` is semantically equivalent to `writeHDF5Array(as.array(x), ...)`, except that `as.array(x)` is not called because this would realize the full object at once in memory.

See `?DelayedArray` for general information about DelayedArray objects.

### References

Documentation of the H5 predefined datatypes on the HDF Group's Support Portal: https://portal.hdfgroup.org/display/HDF5/Predefined+Datatypes

### See Also

- HDF5Array objects.

- `h5writeDimnames` for writing the dimnames of an HDF5 dataset to disk.

- `saveHDF5SummarizedExperiment` and `loadHDF5SummarizedExperiment` in this package (the HDF5Array package) for saving/loading an HDF5-based SummarizedExperiment object to/from disk.

- HDF5-dump-management to control the location and physical properties of automatically created HDF5 datasets.

- `h5ls` to list the content of an HDF5 file.

### Examples

    ## ---------------------------------------------------------------------
    ## WRITE AN ORDINARY ARRAY TO AN HDF5 FILE
    ## ---------------------------------------------------------------------
    m <- matrix(runif(364, min=-1), nrow=26,
                dimnames=list(letters, LETTERS[1:14]))

    h5file <- tempfile(fileext=".h5")
    M1 <- writeHDF5Array(m, h5file, name="M1", chunkdim=c(5, 5))
    M1
    chunkdim(M1)

    ## By default, writeHDF5Array() does not write the dimnames to the HDF5
    ## file so they are lost:
    dimnames(M1)   # no dimnames

    ## Set 'with.dimnames' to TRUE to write them to the file:
    M1b <- writeHDF5Array(m, h5file, name="M1b", with.dimnames=TRUE)
    dimnames(M1b)  # dimnames are back

    ## With sparse data:
    sm <- rsparsematrix(20, 8, density=0.1)
    M2 <- writeHDF5Array(sm, h5file, name="M2", chunkdim=c(5, 5))
    M2
    is_sparse(M2)  # TRUE

    ## ---------------------------------------------------------------------
    ## WRITE A DelayedArray OBJECT TO AN HDF5 FILE
    ## ---------------------------------------------------------------------
    M3 <- log(t(DelayedArray(m)) + 1)
    M3 <- writeHDF5Array(M3, h5file, name="M3", chunkdim=c(5, 5))
    M3
    chunkdim(M3)

    library(h5vcData)
    tally_file <- system.file("extdata", "example.tally.hfs5",
                              package="h5vcData")
    h5ls(tally_file)

    cvg0 <- HDF5Array(tally_file, "/ExampleStudy/16/Coverages")

    cvg1 <- cvg0[ , , 29000001:29000007]

    writeHDF5Array(cvg1, h5file, "cvg1")
    h5ls(h5file)

[Package HDF5Array version 1.22.1 Index]