The jaspagate package provides methods for reading and saving takane-formatted objects in Javascript.
This enables web applications to interoperate with R and Python workflows involving complex data structures like the SummarizedExperiment
.
For example, kana can use jaspagate to pull datasets managed by the scRNAseq R package;
conversely, analysis results can be downloaded for further inspection in Python via the dolomite framework.
First, we have to tell jaspagate how to read and write a HDF5 file.
This requires application-specific implementations of the H5Group
and H5DataSet
interfaces.
For example, we could use the h5wasm package (as shown in tests/h5.js
) or the HDF5-reading utilities in scran.js.
The exact implementation is left to the application developer to ensure that only one copy of the HDF5-parsing library (typically a WebAssembly binary) is bundled into the application.
We then define a globals
object that specifies how to open a "file" in our Javascript-based application.
This should implement the GlobalFsInterface
and GlobalH5Interface
interfaces.
In a backend environment like Node.js, setting up this object is pretty easy as described in tests/globals.js
.
For the browser, the process of acquiring a file path is more involved as direct access to the filesystem is not typically allowed;
instead, we need to either return the contents of the file as a Uint8Array
or write to a virtual filesystem.
Phew. Once we've done all that, we can finally read our objects.
import * as jsp from "jaspagate";
let obj = await jsp.readObject(path, /* metadata = */ null, globals);
await jsp.saveObject(obj, "new/copy/of/object", globals);
Check out the reference documentation for more details.
Currently, we only support a small number of takane formats.
-
data_frame
objects are loaded asDataFrame
instances, with the following caveats:- Annotations on the columns are not loaded.
- Metadata is not loaded or saved.
-
summarized_experiment
objects are loaded asSummarizedExperiment
instances, with the following caveats:- To read or save assays, each application should define and register their own functions
in
readObjectRegistry
andsaveObjectRegistry
. This ensures that large datasets are directly converted to application-specific representations for optimal efficiency. - Metadata is not loaded or saved.
- To read or save assays, each application should define and register their own functions
in
-
ranged_summarized_experiment
objects are loaded asRangedSummarizedExperiment
instances, with the following caveats:- Everything mentioned for
summarized_experiment
. - Non-empty row ranges are not loaded or saved.
- Everything mentioned for
-
single_cell_experiment
objects are loaded asSingleCellExperiment
instances, with the following caveats:- Everything mentioned for
ranged_summarized_experiment
.
- Everything mentioned for
If you need something for your application, make an issue and we'll see what we can do.
The takane specifications, which describe the file representation of each object.
The alabaster.base R package, to read and write takane-formatted objects in R.
The dolomite-base Python package, to read and write takane-formatted objects in Python.