util.array {CHNOSZ}R Documentation

Functions to Work with Multidimensional Arrays


These functions can be used to turn a list into an array and extract or replace values or take the sum along a certain dimension of an array.


  slice(arr, d = NULL, i = 1, value = NULL)
  dimSums(arr, d = 1, i = NULL)
  slice.affinity(affinity, d = 1, i = 1)



a list.


an array.


numeric, what dimension to use.


numeric, what slice to use.


values to assign to the portion of an array specified by d and i.


list, output from affinity function.


list2array turns a list of arrays, each with the same dimensions, into a new array having one more dimension whose size is equal to the number of initial arrays.

slice extracts or assigns values from/to the ith slice(s) in the dth dimension of an array. Values are assigned to an array if value is not NULL. This function works by building an expression containing the extraction operator ([).

slice.affinity performs a slice operation on the values element of the affinity variable (which should be the output of affinity).

dimSums sums an array along the dth dimension using only the ith slices in that dimension. If i is NULL, all slices in that dimension are summed together. For matrices, dimSums(x,1) has the same result as colSums(x) and dimSums(x,2) has the same result as rowSums(x).


# start with a matrix
x <- matrix(1:12,ncol=3)
# pay attention to the following when
# writing examples that test for identity!
identical(1*x,x)   # FALSE
# create two matrices that are multiples of the first
a <- 1*x
b <- 2*a
# these both have two dimensions of lengths 4 and 3
dim(a)  # 4 3
# combine them to make an array with three dimensions
c <- list2array(list(a,b))
# the third dimension has length 2
dim(c)  # 4 3 2
# the first slice of the third dimension == a
stopifnot(identical( slice(c,3), a ))
# the second slice of the third dimension == b
stopifnot(identical( slice(c,3,2), b ))
# 'slice' works just like the bracket operator
c11 <- slice(c,1)
c12 <- slice(c,1,2)
c21 <- slice(c,2,1)
c212 <- slice(c,2,1:2)
stopifnot(identical( c11, c[1,,] ))
stopifnot(identical( c12, c[2,,] ))
stopifnot(identical( c21, c[,1,] ))
stopifnot(identical( c212, c[,1:2,] ))
# let us replace part of the array
d <- slice(c,3,2,value=a)
# now the second slice of the third dimension == a
stopifnot(identical( slice(d,3,2), a ))
# and the sum across the third dimension == b
stopifnot(identical( dimSums(d,3), b ))
# taking the sum removes that dimension
dim(d)             # 4 3 2
dim(dimSums(d,1))  # 3 2
dim(dimSums(d,2))  # 4 2
dim(dimSums(d,3))  # 4 3

# working with an 'affinity' object

a1 <- affinity(O2=c(-80,-60))   # at pH=7
a2 <- affinity(O2=c(-80,-60),pH=c(0,14,7))
# in the 2nd dimension (pH) get the 4th slice (pH=7)
a3 <- slice.affinity(a2,2,4)

[Package CHNOSZ version 1.1.3 Index]