invertMap: Inverts a read or a write map

View source: R/invertMap.R

invertMapR Documentation

Inverts a read or a write map

Description

Inverts a read or a write map.

Usage

invertMap(map, ...)

Arguments

map

An integer vector.

...

Not used.

Details

An map is defined to be a vector of n with unique finite values in [1,n]. Finding the inverse of a map is the same as finding the rank of each element, cf. order(). However, this method is much faster, because it utilizes the fact that all values are unique and in [1,n]. Moreover, for any map it holds that taking the inverse twice will result in the same map.

Value

Returns an integer vector.

Author(s)

Henrik Bengtsson

See Also

To generate an optimized write map for a CDF file, see readCdfUnitsWriteMap().

Examples

set.seed(1)

# Simulate a read map for a chip with 1.2 million cells
nbrOfCells <- 1200000
readMap <- sample(nbrOfCells)

# Get the corresponding write map
writeMap <- invertMap(readMap)

# A map inverted twice should be equal itself
stopifnot(identical(invertMap(writeMap), readMap))

# Another example illustrating that the write map is the
# inverse of the read map
idx <- sample(nbrOfCells, size=1000)
stopifnot(identical(writeMap[readMap[idx]], idx))

# invertMap() is much faster than order()
t1 <- system.time(invertMap(readMap))[3]
cat(sprintf("invertMap()  : %5.2fs [ 1.00x]\n", t1))

t2 <- system.time(writeMap2 <- sort.list(readMap, na.last=NA, method="quick"))[3]
cat(sprintf("'quick sort' : %5.2fs [%5.2fx]\n", t2, t2/t1))
stopifnot(identical(writeMap, writeMap2))

t3 <- system.time(writeMap2 <- order(readMap))[3]
cat(sprintf("order()      : %5.2fs [%5.2fx]\n", t3, t3/t1))
stopifnot(identical(writeMap, writeMap2))

# Clean up
rm(nbrOfCells, idx, readMap, writeMap, writeMap2)


HenrikBengtsson/affxparser documentation built on Feb. 9, 2024, 3:13 a.m.