DelayedAperm objects
DelayedAperm-class.RdNOTE: This man page is about DelayedArray internals and is provided for developers and advanced users only.
The DelayedAperm class provides a formal representation of a
delayed "extended aperm()" operation, that is, of a delayed
aperm() that can drop and/or add ineffective
dimensions. Note that since only ineffective dimensions (i.e.
dimensions with an extent of 1) can be dropped or added, the length of
the output array is guaranteed to be the same as the length of the input
array.
DelayedAperm is a concrete subclass of the DelayedUnaryOp virtual class, which itself is a subclass of the DelayedOp virtual class:
DelayedOp
^
|
DelayedUnaryOp
^
|
DelayedAperm
DelayedAperm objects are used inside a DelayedArray object to
represent the delayed "extended aperm()" operations carried
by the object. They're never exposed to the end user and are not intended
to be manipulated directly.
Usage
# S4 method for class 'DelayedAperm'
is_noop(x)
# S4 method for class 'DelayedAperm'
summary(object, ...)
## ~ ~ ~ Seed contract ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
# S4 method for class 'DelayedAperm'
dim(x)
# S4 method for class 'DelayedAperm'
dimnames(x)
# S4 method for class 'DelayedAperm'
extract_array(x, index)
## ~ ~ ~ Propagation of sparsity ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
# S4 method for class 'DelayedAperm'
is_sparse(x)
# S4 method for class 'DelayedAperm'
extract_sparse_array(x, index)Arguments
- x, object
A DelayedAperm object.
- index
See
?extract_arrayin the S4Arrays package for a description of theindexargument.- ...
Not used.
See also
DelayedOp objects.
showtreeto visualize the nodes and access the leaves in the tree of delayed operations carried by a DelayedArray object.extract_array in the S4Arrays package.
extract_sparse_arrayin the SparseArray package.
Examples
## DelayedAperm extends DelayedUnaryOp which extends DelayedOp:
extends("DelayedAperm")
#> [1] "DelayedAperm" "DelayedUnaryOp" "DelayedOp" "Array"
## ---------------------------------------------------------------------
## BASIC EXAMPLES
## ---------------------------------------------------------------------
a0 <- array(1:20, dim=c(1, 10, 2))
A0 <- DelayedArray(a0)
showtree(A0)
#> 1x10x2 integer: DelayedArray object
#> └─ 1x10x2 integer: [seed] array object
A <- aperm(A0, perm=c(2, 3, 1))
showtree(A)
#> 10x2x1 integer: DelayedArray object
#> └─ 10x2x1 integer: Aperm (perm=c(2,3,1))
#> └─ 1x10x2 integer: [seed] array object
class(A@seed) # a DelayedAperm object
#> [1] "DelayedAperm"
#> attr(,"package")
#> [1] "DelayedArray"
M1 <- drop(A0)
showtree(M1)
#> 10x2 integer: DelayedMatrix object
#> └─ 10x2 integer: Aperm (perm=c(2,3))
#> └─ 1x10x2 integer: [seed] array object
class(M1@seed) # a DelayedAperm object
#> [1] "DelayedAperm"
#> attr(,"package")
#> [1] "DelayedArray"
M2 <- t(M1)
showtree(M2)
#> 2x10 integer: DelayedMatrix object
#> └─ 2x10 integer: Aperm (perm=c(3,2))
#> └─ 1x10x2 integer: [seed] array object
class(M2@seed) # a DelayedAperm object
#> [1] "DelayedAperm"
#> attr(,"package")
#> [1] "DelayedArray"
## ---------------------------------------------------------------------
## PROPAGATION OF SPARSITY
## ---------------------------------------------------------------------
## DelayedAperm objects always propagate sparsity.
sa0 <- SparseArray(a0)
SA0 <- DelayedArray(sa0)
showtree(SA0)
#> 1x10x2 integer, sparse: DelayedArray object
#> └─ 1x10x2 integer, sparse: [seed] SparseArray object
is_sparse(SA0) # TRUE
#> [1] TRUE
SA <- aperm(SA0, perm=c(2, 3, 1))
showtree(SA)
#> 10x2x1 integer, sparse: DelayedArray object
#> └─ 10x2x1 integer, sparse: Aperm (perm=c(2,3,1))
#> └─ 1x10x2 integer, sparse: [seed] SparseArray object
class(SA@seed) # a DelayedAperm object
#> [1] "DelayedAperm"
#> attr(,"package")
#> [1] "DelayedArray"
is_sparse(SA@seed) # TRUE
#> [1] TRUE
## ---------------------------------------------------------------------
## SANITY CHECKS
## ---------------------------------------------------------------------
stopifnot(class(A@seed) == "DelayedAperm")
stopifnot(class(M1@seed) == "DelayedAperm")
stopifnot(class(M2@seed) == "DelayedAperm")
stopifnot(class(SA@seed) == "DelayedAperm")
stopifnot(is_sparse(SA@seed))