R: Extract a subset of an array, matrix or a vector with unknown...

extract.array {R.utils} | R Documentation

## Extract a subset of an array, matrix or a vector with unknown dimensions

### Description

Extract a subset of an array, matrix or a vector with unknown dimensions.

This method is useful when you do not know the number of dimensions of the object your wish to extract values from, cf. example.

### Usage

    ## S3 method for class 'array'
    extract(x, ..., indices=list(...), dims=names(indices), drop=FALSE)

### Arguments

`x` | An `array` or a `matrix`.
`...` | These arguments are by default put into the `indices` `list`.
`indices` | A `list` of index `vector`s to be extracted.
`dims` | An `vector` of dimensions - one per element in `indices` - which will be coerced to `integer`s. If `NULL`, it will default to `seq_along(indices)`.
`drop` | If `TRUE`, dimensions of length one are dropped, otherwise not.

### Value

Returns an `array`.

### Author(s)

Henrik Bengtsson

### See Also

`slice.index`()

### Examples

    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    # Example using an array with a random number of dimensions
    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    maxdim <- 4
    dim <- sample(3:maxdim, size=sample(2:maxdim, size=1), replace=TRUE)
    ndim <- length(dim)
    dimnames <- list()
    for (kk in 1:ndim)
      dimnames[[kk]] <- sprintf("%s%d", letters[kk], 1:dim[kk])
    x <- 1:prod(dim)
    x <- array(x, dim=dim, dimnames=dimnames)

    cat("\nArray 'x':\n")
    print(x)

    cat("\nExtract 'x[2:3,...]':\n")
    print(extract(x, "1"=2:3))

    cat("\nExtract 'x[3,2:3,...]':\n")
    print(extract(x, "1"=3,"2"=2:3))

    cat("\nExtract 'x[...,2:3]':\n")
    print(extract(x, indices=2:3, dims=length(dim(x))))

    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    # Assertions
    # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    y <- array(1:24, dim=c(2,3,4))
    yA <- y[,,2:3]
    yB <- extract(y, indices=list(2:3), dims=length(dim(y)))
    stopifnot(identical(yB, yA))

    yA <- y[,2:3,2]
    yB <- extract(y, indices=list(2:3,2), dims=c(2,3), drop=TRUE)
    stopifnot(identical(yB, yA))

[Package R.utils version 2.7.0 Index]