Oarray {Oarray}R Documentation

Arrays with arbitrary offsets

Description

The traditional R array has extents which are indexed with integers that start at 1. This is generalized to arbitrary offsets, where extent i is indexed with integers that start at offset[i], which must be no less than zero to accomodate the R convention of dropping components with negative indices. In order to use negative offsets, the flag drop.negative can be set FALSE.

Usage

Oarray(data=NA, dim=length(data), dimnames=NULL, offset=NA,
  drop.negative=TRUE)
as.Oarray(x, offset=NA, drop.negative=TRUE)
as.array(x)
print(x)
x[i]
x[i, j, ...]
x[i, j, ..., drop=TRUE]

Arguments

data, dim, dimnames As in the function array
offset Vector of first index values for each extent (defaults to 1s)
drop.negative Should negative subscripts indicate exclusion?
x An array, possibly of class Oarray
i, j, ... Indexing arguments to x

Value

Typically and array with or without a Oarray class attribute. Extracting from an Oarray object unclasses the result which is then a simple array, but assigning into an Oarray object leaves the result as an Oarray object.
The print method provides more informative extent labelling in the case where dimnames are not provided.

Side effects

The function as.array from package:base is redefined to provide an as.array.Oarray method.

Note

The use of drop=FALSE will only work in [.Oarray where it is provided as the final argument inside the square brackets.

The function .handleTheOffset is not for general use.

Author(s)

Jonathan Rougier, J.C.Rougier@durham.ac.uk

See Also

array

Examples

fred <- Oarray(1:24, 2:4, list(c("sad", "happy"), NULL, NULL),
  offset=rep(7, 3))

tmp <- as.array(fred)
fred1 <- as.Oarray(tmp, offset=rep(7, 3))
stopifnot(is.Oarray(fred1), all.equal(fred, fred1))

print.default(fred)  # print method provides numbers for
fred                 # non-named extents

# examples of extraction

fred[] # unclasses fred
fred["sad", 7, -9]
fred["sad", 7, -9, drop=FALSE]
fred[-8, , 7:8]

i <- 8:9; fred[, , i+1]
how.I.feel <- "happy"; fred[how.I.feel, , -(7:8)]

# examples of assignment

fred["sad", 7, -9] <- NA
fred[, , i] <- 100
fred[how.I.feel, , -(7:8)] <- Inf

# now use negative offsets and suppress usual behaviour

fred <- Oarray(24:1, 2:4, offset=c(-1, -2, 7), drop.negative=FALSE)
fred[] <- 1:24
fred[-(1:0), , 7:8]
fred[-(1:0), , 7:8] <- 100
dimnames(fred) <- list(c("sad", "happy"), NULL, NULL)
fred["sad", -2, 10] <- NA

[Package Contents]