Title: | Arrays with Arbitrary Offsets |
---|---|
Description: | Generalise the starting point of the array index. |
Authors: | Jonathan Rougier <[email protected]> |
Maintainer: | Robin K. S. Hankin <[email protected]> |
License: | GPL |
Version: | 1.4-9 |
Built: | 2024-11-16 05:35:32 UTC |
Source: | https://github.com/robinhankin/oarray |
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
.
Oarray(data=NA, dim=length(data), dimnames=NULL, offset=rep(1, length(dim)), drop.negative=TRUE) as.Oarray(x, offset=rep(1, length(dim)), drop.negative=TRUE) ## S3 method for class 'Oarray' as.array(x, ...) ## S3 method for class 'Oarray' print(x, ...)
Oarray(data=NA, dim=length(data), dimnames=NULL, offset=rep(1, length(dim)), drop.negative=TRUE) as.Oarray(x, offset=rep(1, length(dim)), drop.negative=TRUE) ## S3 method for class 'Oarray' as.array(x, ...) ## S3 method for class 'Oarray' print(x, ...)
data , dim , dimnames , drop
|
As in the function |
offset |
Vector of first index values for each extent (defaults to 1s); a length-one argument will be silently recycled to the appropriate length |
drop.negative |
Should negative subscripts indicate exclusion? |
x |
An array, possibly of class ‘Oarray’ |
... |
Additional arguments to |
Typical uses are
x[i, j] x[i, j] <- someValues
where x
is an object of class ‘Oarray’ and i
,
j
are indices specifying which elements to extract or replace.
Indexing may be via a logical matrix, which indicates which elements to select.
Indexing may be via a single numeric matrix with the one column for each
dimension: the offset is sweep()
-ed out. See Extract.Rd
for details.
The use of drop.negative = FALSE
will only work in
[.Oarray
where it is provided as the final argument inside
the square brackets.
Typically an array, either with or without the ‘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.
The function base::as.array
is redefined
as generic, to provide an as.array.Oarray
method.
Jonathan Rougier, [email protected]
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(identical(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 # array and logical indexing a <- Oarray(0, dim=rep(2,4),offset=rep(0,4)) a[diag(4)] <- 1 a[a == 0] <- NA
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(identical(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 # array and logical indexing a <- Oarray(0, dim=rep(2,4),offset=rep(0,4)) a[diag(4)] <- 1 a[a == 0] <- NA