Loads a neuroimaging volume from one or more files, with support for various input formats and memory management strategies.
Usage
read_vec(
file_name,
indices = NULL,
mask = NULL,
mode = c("normal", "mmap", "bigvec", "filebacked")
)Arguments
- file_name
A character vector of one or more file paths to load. A 3D file is promoted to a 4D
NeuroVecwith a single time point (see Details). When multiple paths are supplied the result is always aNeuroVecSeq(which itself extendsNeuroVec), regardless of whether the individual files are 3D, 4D, or a mix of both.- indices
The indices of the sub-volumes to load (e.g. if the file is 4-dimensional). Only supported in "normal" mode.
- mask
A logical mask defining which spatial elements to load. Required for "bigvec" mode and optional for other modes.
- mode
The IO mode which is one of: * "normal": Standard in-memory loading * "mmap": Memory-mapped access (more memory efficient) * "bigvec": Optimized for large datasets with masking * "filebacked": File-backed storage with on-demand loading
Value
The return type depends on how many files are supplied:
Single 3D file — a
NeuroVecwithdim(x)[4] == 1(concrete class depends onmode: e.g.DenseNeuroVecfor"normal",MappedNeuroVecfor"mmap",BigNeuroVecfor"bigvec",FileBackedNeuroVecfor"filebacked").Single 4D file — a
NeuroVecof the same concrete class as above, withdim(x)[4]equal to the 4th dimension of the file (orlength(indices)whenindicesis supplied).Multiple files (any mix of 3D and 4D) — a
NeuroVecSeqwrapping oneNeuroVecper input file in the order given. BecauseNeuroVecSeqextendsNeuroVec, it can be used wherever aNeuroVecis accepted, but its underlying storage is segmented rather than a single contiguous 4D array. For example,read_vec(c(vol, vec, vec, vol))returns a 4-elementNeuroVecSeqwhose segments have time lengthsc(1, T2, T3, 1).
Details
This function supports multiple file formats: * .nii: Standard NIfTI format * .nii.gz: Compressed NIfTI (not supported in mmap mode)
Memory management modes: * "normal": Loads entire dataset into memory. Best for smaller datasets or when memory is not a constraint. * "mmap": Memory-maps the file, providing efficient access for large files without loading entirely into memory. Not available for compressed files. * "bigvec": Optimized for large datasets where only a subset of voxels are of interest. Requires a mask to specify which voxels to load. * "filebacked": Similar to mmap but with more flexible caching strategies.
3D inputs: A path pointing at a 3D image is not rejected. It is promoted
to a 4D NeuroVec whose fourth dimension has length 1, so the return type is
always a NeuroVec, never a NeuroVol. If you want a true
volume, use read_vol (or vec[[1]]).
Multiple files: When file_name has length > 1, each file is loaded
independently and the results are wrapped with NeuroVecSeq. No data is
copied or re-concatenated into a single dense 4D array; the returned
NeuroVecSeq holds the constituent NeuroVecs in its @vecs slot
and exposes them as a single logical time series. Time-point lookups (e.g.
x[[i]], sub_vector(x, i), linear_access(x, i)) transparently
walk across the segments. The per-file time lengths may differ (e.g. a 3D file
contributes 1 time point, a 4D file contributes dim(file)[4]); all spatial
dimensions must match.
Note
* Memory-mapping (.mmap mode) is not supported for gzipped files * The bigvec mode requires a mask to be specified * When loading multiple files, they must have compatible dimensions
Examples
# Load a single NIfTI file
img <- read_vec(system.file("extdata", "global_mask_v4.nii", package="neuroim2"))
# Memory-mapped loading for large files
big_img <- read_vec(system.file("extdata", "global_mask_v4.nii", package="neuroim2"), mode="mmap")
#> loading /home/runner/work/_temp/Library/neuroim2/extdata/global_mask_v4.nii as mmaped file
# Load masked data for memory efficiency
mask <- as.logical(big_img[[1]])
masked_data <- read_vec(system.file("extdata", "global_mask_v4.nii", package="neuroim2"),
mask=mask, mode="bigvec")
#> loading /home/runner/work/_temp/Library/neuroim2/extdata/global_mask_v4.nii as bigvec