match {base} | R Documentation |
match
returns a vector of the positions of (first) matches of
its first argument in its second.
%in%
is a more intuitive interface as a binary operator,
which returns a logical vector indicating if there is a match or not
for its left operand.
match(x, table, nomatch = NA, incomparables = FALSE) x %in% table
x |
vector: the values to be matched. |
table |
vector: the values to be matched against. |
nomatch |
the value to be returned in the case when no match is
found. Note that it is coerced to integer . |
incomparables |
a vector of values that cannot be matched. Any
value in x matching a value in this vector is assigned the
nomatch value. Currently, FALSE is the only possible
value, meaning that all values can be matched. |
%in%
is currently defined as
"%in%" <- function(x, table) match(x, table, nomatch = 0) > 0
Factors are converted to character vectors, and then x
and
table
are coerced to a common type (the later of the two types
in R's ordering, logical < integer < numeric < complex < character < list)
before matching.
Matching for lists is potentially very slow and best avoided except in simple cases.
In both cases, a vector of the same length as x
.
match
: An integer vector giving the position in table
of
the first match if there is a match, otherwise nomatch
.
If x[i]
is found to equal table[j]
then the value returned in the i
-th position of the return value is
j
, for the smallest possible j
. If no match is found,
the value is nomatch
.
%in%
: A logical vector, indicating if a match was located for
each element of x
.
Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.
pmatch
and charmatch
for (partial)
string matching, match.arg
, etc for function argument
matching.
is.element
for an S-compatible equivalent of %in%
.
## The intersection of two sets : intersect <- function(x, y) y[match(x, y, nomatch = 0)] intersect(1:10,7:20) 1:10 %in% c(1,3,5,9) sstr <- c("c","ab","B","bba","c","@","bla","a","Ba","%") sstr[sstr %in% c(letters,LETTERS)] "%w/o%" <- function(x,y) x[!x %in% y] #-- x without y (1:10) %w/o% c(3,7,12)