Rev 52609 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
% File src/library/base/man/match.Rd% Part of the R package, http://www.R-project.org% Copyright 1995-2010 R Core Development Team% Distributed under GPL 2 or later\name{match}\alias{match}\alias{\%in\%}\title{Value Matching}\description{\code{match} returns a vector of the positions of (first) matches ofits first argument in its second.\code{\%in\%} is a more intuitive interface as a binary operator,which returns a logical vector indicating if there is a match or notfor its left operand.}\usage{match(x, table, nomatch = NA_integer_, incomparables = NULL)x \%in\% table}\arguments{\item{x}{vector or \code{NULL}: the values to be matched.}\item{table}{vector or \code{NULL}: the values to be matched against.}\item{nomatch}{the value to be returned in the case when no match isfound. Note that it is coerced to \code{integer}.}\item{incomparables}{a vector of values that cannot be matched. Anyvalue in \code{x} matching a value in this vector is assigned the\code{nomatch} value. For historical reasons, \code{FALSE} isequivalent to \code{NULL}.}}\value{A vector of the same length as \code{x}.\code{match}: An integer vector giving the position in \code{table} ofthe first match if there is a match, otherwise \code{nomatch}.If \code{x[i]} is found to equal \code{table[j]} then the valuereturned in the \code{i}-th position of the return value is \code{j},for the smallest possible \code{j}. If no match is found, the valueis \code{nomatch}.\code{\%in\%}: A logical vector, indicating if a match was located foreach element of \code{x}: thus the values are \code{TRUE} or\code{FALSE} and never \code{NA}.}\details{\code{\%in\%} is currently defined as \cr\code{"\%in\%" <- function(x, table) match(x, table, nomatch = 0) > 0}Factors, raw vectors and lists are converted to character vectors, andthen \code{x} and \code{table} are coerced to a common type (the laterof the two types in \R's ordering, logical < integer < numeric <complex < character) before matching. If \code{incomparables} haspositive length it is coerced to the common type.Matching for lists is potentially very slow and best avoided except insimple cases.Exactly what matches what is to some extent a matter of definition.For all types, \code{NA} matches \code{NA} and no other value.For real and complex values, \code{NaN} values are regardedas matching any other \code{NaN} value, but not matching \code{NA}.That \code{\%in\%} never returns \code{NA} makes it particularlyuseful in \code{if} conditions.}\references{Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988)\emph{The New S Language}.Wadsworth & Brooks/Cole.}\seealso{\code{\link{pmatch}} and \code{\link{charmatch}} for (\emph{partial})string matching, \code{\link{match.arg}}, etc for function argumentmatching.\code{\link{findInterval}} similarly returns a vector of positions, butfinds numbers within intervals, rather than exact matches.\code{\link{is.element}} for an S-compatible equivalent of \code{\%in\%}.}\examples{## 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 carefulintersect(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)}\keyword{manip}\keyword{logic}