idFilter
provides access to a small registry that
contains a set of filtering strategy functions, which can
be used in calls to the mapIDs
function.
idFilter(name, ..., .wrap = FALSE) idFilterAll(map, ...) idFilterFirstN(map, n = 1L, exact.first = TRUE, ...) idFilterOneToOne(map, ...) idFilterInjective(map, strict = TRUE, ..., .last) idFilterOneToMany(map, ..., .last) idFilterAffy(map, secondary = NULL, ...) idFilterAuto(map, ..., .last) idFilterMAuto(map, ..., .last)
idFilter
, these are extra arguments
that are used to pre-build a call to the strategy, which
is wrapped into a function. These arguments are only used
when .wrap=TRUE
.
For the different filtering stratgies, e.g.,
idFilterAuto, these arguments are either passed to
internal calls to other strategies, or not used, but
required so that filters can be composed.map
and .last
,
that will receive the current mapping and a logical that
is TRUE
only when map
is the last mapping
in the whole sequence of mappings.
The value of .last
will only be passed to the
original filter function if this one has an argument of
the same name.list
object that maps source
identifiers to another type of identifier.map
constitutes the last mapping or an intermediate mapping.secondary=TRUE
then secondary
probes are kept in the mapping but primary probes are
prioritized, in the sense that they will appear in front
of secondary probes in each element of the mapping. If
secondary=FALSE
then secondary probes are removed
from the mapping, meaning that identifiers that only
mapped to secondary probes are then unmapped. If
secondary=NULL
(default), then the filter is
applied as when secondary=TRUE
, except
when source identifiers are also Affymetrix probes and do
not contain any secondary probes, in which case the the
filters is applied as when secondary=FALSE
.
Any other value for secondary
makes the filter to
behave as a pass through, i.e. the map is returned
unchanged.a function
Filter strategies are functions that take a mapping as
its first argument and returns it after performing some
filtering. They should always also have argument
...
, so that they can be combined in sequences.
Filter strategies may optionally have an argument
.last
, whose value will be filled by
mapIDs
: TRUE
if and only if the mapping
constitutes the last step in the identifier conversion.
The following filter strategies are currently defined:
idFilterAll
[key all]: does not filter at
all, and simply return the input map unchanged.
idFilterFirstN
[key firstN]: keeps the
first n
matches.
idFilterOneToOne
[key 1:1]: only keeps
single matches.
idFilterBiOnetoOne
[key 1:1]: only keeps
bidirectional one to one mapping, i.e. that the reverse
mapping is also one to one. In other words it return the
largest injective mapping.
idFilterOneToMany
[key 1:*]: only keeps
single matches for intermediate mappings, but keeps all
matches (i.e. single and multiple) when mapping to the
last identifier type.
idFilterAffy
[key affy]: enables to
filter out secondary affy probes, i.e., that do not match
the primary pattern "^[0-9]+_at$". This filter only
applies when the destination identifiers are suitable
Affymetrix probes.
idFilterAuto
[key auto]: this filter is a
composed filter, that successively applies filters
affy and firstN. It is suitable when
one wants to map 1 to 1 as many identifiers as possible.
idFilterMAuto
[key mauto]: this filter is
a composed filter, that successively applies filters
affy and 1:*.
# list of all available filters
idFilter()
## [1] "all" "firstN" "1:1" "1-1" "1:*" "affy" "auto" "mauto"
# show a given filter function
idFilter('1:1')
## function(map, ...){
## if( !length(map) ) return(map)
## l <- sapply(map, length)
## ok <- l==1L
## if( (n <- length(l) - sum(ok)) ){
## log_append('(dropped ', n, ' 1:2+ maps) ')
## }
## map[ok]
## }
## <environment: namespace:CellMix>
# composed filter
f <- idFilter(c('1:1', 'affy'))