Learn R Programming

matrixStats (version 0.12.2)

rowAvgsPerColSet.matrix: Applies a row-by-row (column-by-column) averaging function to equally-sized subsets of matrix columns (rows)

Description

Applies a row-by-row (column-by-column) averaging function to equally-sized subsets of matrix columns (rows). Each subset is averaged independently of the others.

Usage

## S3 method for class 'matrix':
rowAvgsPerColSet(X, W=NULL, S, FUN=rowMeans, ..., tFUN=FALSE)

Arguments

X
W
An optional numeric NxM matrix of weights.
S
An integer KxJ matrix specifying the J subsets. Each column holds K column (row) indices for the corresponding subset.
FUN
The row-by-row (column-by-column) function used to average over each subset of X. This function must accept a numeric NxK (KxM
...
Additional arguments passed to then FUN function.
tFUN
If TRUE, the NxK (KxM) matrix passed to FUN() is transposed first.

Value

  • Returns a numeric JxN (MxJ) matrix, where row names equal rownames(X) (colnames(S)) and column names colnames(S) (colnames(X)).

Details

If argument S is a single column vector with indices 1:N, then rowAvgsPerColSet(X, S=S, FUN=rowMeans) gives the same result as rowMeans(X). Analogously, for rowAvgsPerColSet().

Examples

Run this code
X <- matrix(rnorm(20*6), nrow=20, ncol=6)
rownames(X) <- LETTERS[1:nrow(X)]
colnames(X) <- letters[1:ncol(X)]
print(X)


# - - - - - - - - - - - - - - - - - - - - - - - - - -
# Apply rowMeans() for 3 sets of 2 columns
# - - - - - - - - - - - - - - - - - - - - - - - - - -
nbrOfSets <- 3
S <- matrix(1:ncol(X), ncol=nbrOfSets)
colnames(S) <- sprintf("s%d", 1:nbrOfSets)
print(S)

Z <- rowAvgsPerColSet(X, S=S)
print(Z)

# Validation
Z0 <- cbind(s1=rowMeans(X[,1:2]), s2=rowMeans(X[,3:4]),
            s3=rowMeans(X[,5:6]))
stopifnot(identical(drop(Z), Z0))


# - - - - - - - - - - - - - - - - - - - - - - - - - -
# Apply colMeans() for 5 sets of 4 rows
# - - - - - - - - - - - - - - - - - - - - - - - - - -
nbrOfSets <- 5
S <- matrix(1:nrow(X), ncol=nbrOfSets)
colnames(S) <- sprintf("s%d", 1:nbrOfSets)
print(S)

Z <- colAvgsPerRowSet(X, S=S)
print(Z)

# Validation
Z0 <- rbind(s1=colMeans(X[1:4,]), s2=colMeans(X[5:8,]),
            s3=colMeans(X[9:12,]), s4=colMeans(X[13:16,]),
            s5=colMeans(X[17:20,]))
stopifnot(identical(drop(Z), Z0))


# - - - - - - - - - - - - - - - - - - - - - - - - - -
# When there is only one "complete" set
# - - - - - - - - - - - - - - - - - - - - - - - - - -
nbrOfSets <- 1
S <- matrix(1:ncol(X), ncol=nbrOfSets)
colnames(S) <- sprintf("s%d", 1:nbrOfSets)
print(S)

Z <- rowAvgsPerColSet(X, S=S, FUN=rowMeans)
print(Z)

Z0 <- rowMeans(X)
stopifnot(identical(drop(Z), Z0))


nbrOfSets <- 1
S <- matrix(1:nrow(X), ncol=nbrOfSets)
colnames(S) <- sprintf("s%d", 1:nbrOfSets)
print(S)

Z <- colAvgsPerRowSet(X, S=S, FUN=colMeans)
print(Z)

Z0 <- colMeans(X)
stopifnot(identical(drop(Z), Z0))

Run the code above in your browser using DataLab