Learn R Programming

qlcMatrix (version 0.9.2)

rowMax: Row and column extremes (sparse matrices)

Description

Compute maxima and minima for all rows or columns of sparse matrices. Optionally also return which elements are the maxima/minima per row/column.

Usage

rowMax(X, which = FALSE, ignore.zero = TRUE)
colMax(X, which = FALSE, ignore.zero = TRUE)

rowMin(X, which = FALSE, ignore.zero = TRUE) colMin(X, which = FALSE, ignore.zero = TRUE)

Arguments

Value

By default, these functions returns a sparseVector with the non-zero maxima or minima. Eventually use as.vector to turn this into a regular vector.

When which = T, the result is a list of two items:max/minthe same sparse vector as described above.whicha sparse pattern matrix of the kind ngCMatrix indicating the position of the extrema. Note that an extreme might occur more than once per row/column. In that case multiple entries in the row/column are indicated.

Details

The basic workhorse of these functions is the `trick': aggregate(x ~ i, data = summary(X), FUN = max) This usage of aggregate can possibly be used for other row- and column-wise summary statistics of sparse matrices.

Examples

Run this code
# rowMax(X, ignore.zero = FALSE) is the same as apply(X, 1, max)
# however, with large sparse matrices, the 'apply' approach will start eating away at memory
# and things become slower.
X <- rSparseMatrix(1e3, 1e3, 1e2)
system.time(m1 <- rowMax(X, ignore.zero = FALSE))
system.time(m2 <- apply(X, 1, max)) # slower
all.equal(as.vector(m1), m2) # but same result

# to see the effect even stronger, try something larger
# depending on the amount of available memory, the 'apply' approach will give an error
# "problem too large"
X <- rSparseMatrix(1e6, 1e6, 1e6)
system.time(m1 <- rowMax(X, ignore.zero = FALSE))
system.time(m2 <- apply(X, 1, max))

# speed depends most strongly on the number of entries in the matrix
# also some performance loss with size of matrix
# up to 1e5 entries is still reasonably fast

X <- rSparseMatrix(1e7, 1e7, 1e5)
system.time(m <- rowMax(X))

X <- rSparseMatrix(1e7, 1e7, 1e6)
system.time(M <- rowMax(X)) # about ten times as slow

# apply is not feasably on such large matrices
# Error: problem too large...
m <- apply(X, 1, max)

Run the code above in your browser using DataLab