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_integer_, incomparables = NULL) x %in% table
- vector or
NULL: the values to be matched.
- vector or
NULL: the values to be matched against.
- the value to be returned in the case when no match is found. Note that it is coerced to
- a vector of values that cannot be matched. Any value in
xmatching a value in this vector is assigned the
nomatchvalue. For historical reasons,
FALSEis equivalent to
Factors, raw vectors and lists are converted to character vectors, and then
table are coerced to a common type (the later of the two types in R's ordering, logical < integer < numeric < complex < character) before matching. If
incomparables has positive length it is coerced to the common type.
Matching for lists is potentially very slow and best avoided except in simple cases.
Exactly what matches what is to some extent a matter of definition. For all types,
NA and no other value. For real and complex values,
NaN values are regarded as matching any other
NaN value, but not matching
%in% never returns
NA makes it particularly useful in
Character strings will be compared as byte sequences if any input is marked as
A vector of the same length as
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
%in%: A logical vector, indicating if a match was located for each element of
x: thus the values are
FALSE and never
Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.
charmatch for (partial) string matching,
match.arg, etc for function argument matching.
findInterval similarly returns a vector of positions, but finds numbers within intervals, rather than exact matches.
is.element for an S-compatible equivalent of
## The intersection of two sets can be defined via match(): ## Simple version: ## intersect <- function(x, y) y[match(x, y, nomatch = 0)] intersect # the R function in base, slightly more careful intersect(1:10, 7:20) 1:10 %in% c(1,3,5,9) sstr <- c("c","ab","B","bba","c",NA,"@","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)
Documentation reproduced from R 2.15.3. License: GPL-2.