The alabaster.ranges
package implements methods to save genomic ranges (i.e.,
GRanges and GRangesList objects) to file
artifacts and load them back into R. It also supports various
CompressedList subclasses, including the somewhat useful
CompressedSplitDataFrameList. Check out alabaster.base
for more details on the motivation and concepts of the
alabaster framework.
Given some genomic ranges, we can use saveObject() to
save it inside a staging directory:
library(GenomicRanges)
gr <- GRanges("chrA", IRanges(sample(100), width=sample(100)))
mcols(gr)$score <- runif(length(gr))
metadata(gr)$genome <- "Aaron"
seqlengths(gr) <- c(chrA=1000)
library(alabaster.ranges)
tmp <- tempfile()
saveObject(gr, tmp)
list.files(tmp, recursive=TRUE)## [1] "_environment.json"
## [2] "OBJECT"
## [3] "other_annotations/list_contents.json.gz"
## [4] "other_annotations/OBJECT"
## [5] "range_annotations/basic_columns.h5"
## [6] "range_annotations/OBJECT"
## [7] "ranges.h5"
## [8] "sequence_information/info.h5"
## [9] "sequence_information/OBJECT"
We can then easily load it back in with
readObject().
## GRanges object with 100 ranges and 1 metadata column:
## seqnames ranges strand | score
## <Rle> <IRanges> <Rle> | <numeric>
## [1] chrA 44-69 * | 0.724213
## [2] chrA 15-37 * | 0.971441
## [3] chrA 81-176 * | 0.959196
## [4] chrA 82-95 * | 0.581900
## [5] chrA 27-50 * | 0.140054
## ... ... ... ... . ...
## [96] chrA 19-73 * | 0.7846175
## [97] chrA 43-101 * | 0.0119339
## [98] chrA 95-147 * | 0.7967389
## [99] chrA 21-71 * | 0.3263696
## [100] chrA 26-46 * | 0.9022337
## -------
## seqinfo: 1 sequence from an unspecified genome
The same can be done for GRangesList and
CompressedList subclasses.
Metadata is preserved during this round-trip:
## $genome
## [1] "Aaron"
## DataFrame with 100 rows and 1 column
## score
## <numeric>
## 1 0.724213
## 2 0.971441
## 3 0.959196
## 4 0.581900
## 5 0.140054
## ... ...
## 96 0.7846175
## 97 0.0119339
## 98 0.7967389
## 99 0.3263696
## 100 0.9022337
## Seqinfo object with 1 sequence from an unspecified genome:
## seqnames seqlengths isCircular genome
## chrA 1000 NA <NA>
## R version 4.6.1 (2026-06-24)
## Platform: x86_64-pc-linux-gnu
## Running under: Ubuntu 26.04 LTS
##
## Matrix products: default
## BLAS: /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3
## LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.32.so; LAPACK version 3.12.0
##
## locale:
## [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
## [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
## [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
## [7] LC_PAPER=en_US.UTF-8 LC_NAME=C
## [9] LC_ADDRESS=C LC_TELEPHONE=C
## [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
##
## time zone: Etc/UTC
## tzcode source: system (glibc)
##
## attached base packages:
## [1] stats4 stats graphics grDevices utils datasets methods
## [8] base
##
## other attached packages:
## [1] alabaster.ranges_1.13.0 alabaster.base_1.13.1 GenomicRanges_1.65.0
## [4] Seqinfo_1.3.0 IRanges_2.47.2 S4Vectors_0.51.5
## [7] BiocGenerics_0.59.8 generics_0.1.4 BiocStyle_2.41.0
##
## loaded via a namespace (and not attached):
## [1] cli_3.6.6 knitr_1.51 rlang_1.2.0
## [4] xfun_0.59 otel_0.2.0 jsonlite_2.0.0
## [7] buildtools_1.0.0 htmltools_0.5.9 maketools_1.3.2
## [10] sys_3.4.3 sass_0.4.10 rmarkdown_2.31
## [13] evaluate_1.0.5 jquerylib_0.1.4 fastmap_1.2.0
## [16] Rhdf5lib_2.1.0 alabaster.schemas_1.13.0 yaml_2.3.12
## [19] lifecycle_1.0.5 BiocManager_1.30.27 compiler_4.6.1
## [22] Rcpp_1.1.1-1.1 rhdf5filters_1.25.0 rhdf5_2.57.1
## [25] digest_0.6.39 R6_2.6.1 bslib_0.11.0
## [28] tools_4.6.1 cachem_1.1.0