knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  fig.path = "man/figures/README-",
  out.width = "100%"
)

The NiftiArray package is under development please check back later!

NiftiArray

muschellij2 badges: Build Status AppVeyor Build Status CRAN_Status_Badge Codecov test coverage

avalcarcel9 badges: Build Status AppVeyor Build Status CRAN_Status_Badge Coveralls test coverage

The goal of NiftiArray is to allow for memory efficient fast random access of NIfTI objects. NiftiArray is an R package that allows for convenient and memory-efficient containers for on-disk representation of NIfTI objects. We allow for DelayedArray extensions and support all operations supported by DelayedArray objects. These operations can be either delayed or block-processed.

You can find a package vignette here.

Installation

You can install the development version of NiftiArray from GitHub with:

# install.packages('remotes')
remotes::install_github("muschellij2/NiftiArray")

We are working to get a stable version on Neuroconductor.

Example

Here we use the example image from RNifti. We use the writeNiftiArray function to create a NiftiArray object:

library(NiftiArray)
nii_fname = system.file("extdata", "example.nii.gz", package = "RNifti")
res = writeNiftiArray(nii_fname)
class(res)
dim(res)
res

We can see the file on disk that was written out:

res@seed@filepath

We see that the object is a low-memory DelayedArray:

object.size(res)

You can also simply use the NiftiArray function of the NIfTI filename to create the array:

res = NiftiArray(nii_fname)

We see the header information is encoded in the seed slot of the object, which can be accessed using the nifti_header function:

nifti_header(res)

Creating a Matrix

mat = as(res, "NiftiMatrix")
mat

Now that the image is a matrix, we can bind the columns together,

mat = DelayedArray::acbind(mat, mat, mat, mat)
testthat::expect_is(mat, "DelayedMatrix")
object.size(mat)

Now that we have the data in a DelayedMatrix class, we can use the package DelayedMatrixStats package that calls the matrixStats package for quick operations:

vec_result = DelayedMatrixStats::rowMedians(mat)
head(vec_result)

Turning the output back into a NiftiArray, we have to pass in the header argument, passing in the correct header information. We can either create the NiftiArray output by creating a matrix, then the NiftiMatrix, then the NiftiArray.

res_mat = matrix(vec_result, ncol = 1)
res_mat = as(res_mat, "NiftiMatrix")
hdr = nifti_header(res)
res_mat = writeNiftiArray(res_mat, header = hdr)
class(res_mat)
res_arr = as(res_mat, "NiftiArray")

Or we can create an array and then making the NiftiArray:

arr = array(vec_result, dim = dim(res) )
hdr = nifti_header(res)
res_arr = writeNiftiArray(arr, header = hdr)
res_arr
nifti_header(res_arr)

Converting back to niftiImage

We can return a niftiImage from the NiftiArray object, as follows:

nii = as(res_arr, "niftiImage")
nii


muschellij2/NiftiArray documentation built on June 17, 2020, 1:39 a.m.