Skip to contents

This function centers and/or scales the row-subsets of a numeric matrix or matrix-like object.

Usage

split_scale(x, f, center, scale)

# S4 method for matrix,factor,logical,logical
split_scale(x, f, center = TRUE, scale = TRUE)

# S4 method for matrix,factor,missing,missing
split_scale(x, f)

# S4 method for DenseNeuroVec,factor,missing,missing
split_scale(x, f)

# S4 method for DenseNeuroVec,factor,logical,missing
split_scale(x, f, center)

# S4 method for DenseNeuroVec,factor,logical,logical
split_scale(x, f, center, scale)

Arguments

x

A numeric matrix or matrix-like object.

f

The splitting object, typically a factor or a set of integer indices. Must be equal to the number of rows in the matrix.

center

Should values within each submatrix be centered? If TRUE, the mean is removed from each column of the submatrix.

scale

Should values be scaled? If TRUE, the vector is divided by the standard deviation for each column of the submatrix.

Value

A new matrix or matrix-like object in which the original rows have been grouped by 'f' and then centered and/or scaled for each grouping.

Examples


M <- matrix(rnorm(1000), 10, 100)
fac <- factor(rep(1:2, each=5))
Ms <- split_scale(M, fac)

## Correctly centered
all(abs(apply(Ms[fac == 1,], 2, mean)) < .000001)
#> [1] TRUE
all(abs(apply(Ms[fac == 2,], 2, mean)) < .000001)
#> [1] TRUE

## Correctly scaled
all.equal(apply(Ms[fac == 1,], 2, sd), rep(1, ncol(Ms)))
#> [1] TRUE
all.equal(apply(Ms[fac == 2,], 2, sd), rep(1, ncol(Ms)))
#> [1] TRUE