Next: mathhelp() Up: MacAnova Help File Previous: manova()   Contents

match()

Usage:
match(x,Target [,nomatch, exact:F or fuzz:d, ignorecase:T]), x REAL,
  LOGICAL or CHARACTER, Target a variable of the same type as x, nomatch
  and d >= 0 REAL scalars; x and Target can't both be nonvectors



Keywords: ordering, variables, character variables
match(x,Target,noMatch), where x is REAL, LOGICAL or CHARACTER and
noMatch is a REAL scalar, attempts to match each element of array x with
each element of vector Target.  Target must be the same type as x.  The
result is REAL with the same dimensions as x.  When x is REAL or
LOGICAL, it is an error for Target to contain any MISSING values.

Let J represent the subscripts of an element of x.  Then result[J] has
value noMatch, when no element of Target matches x[J], and has value k
when Target[k] is the first value with Target[k] = x[J].  When x is REAL
and x[J] is MISSING, then result[J] is MISSING.

match(x,Target) does the same except that length(Target) + 1 is used as
a value for noMatch and, when there are any non-matching elements, an
advisory message is printed.

When x is a vector, Target can be a matrix or array and the matching is
done for each combination of the second and higher dimension of Target.
The result has dimensions vector(length(x), dims(Target)[-1]).  In this
case, when noMatch is omitted, the value for non-matching elements is
dim(Target)[1] + 1.

@inexact_matching
match(x,Target [,noMatch], fuzz:d), where x is REAL and d >= 0 is a
non-MISSING REAL scalar, does the same, except the match that x[J]
matches Target[k] when abs(x[J] - Target[k]) <= d.

match(x,Target [,noMatch], ignorecase:T) ignores the case, upper or
lower, of any alphabetic characters in elements of CHARACTER variables x
and A.  For example, match("AbC",vector("xYz","abc","def"),
ignorecase:T) has value 2.

match(Pattern,Target [,noMatch], exact:F [,ignorecase:T]), where Pattern
is a CHARACTER scalar containing one or more of the "wild card"
characters '*' and '?', and Target is a CHARACTER vector, does the same,
except that an exact match is not required to 'hit' Target.

                    Wild card characters '*' and '?'
A '*' in Pattern will match 0 or more successive characters of an
element of Target, without regard to what they are.  A '?' in Pattern
will match any single character of an element of Target, without regard
to what it is.  For example, "start*" matches the first element of
Target that begins with "start", "*mid*" matches the first element
containing "mid", "*mid1*mid2*end" matches the first element finishing
with "end" that earlier contains "mid1" and "mid2" in that order, "p?l*"
matches the first element starting with 'p' and whose third letter is
'l', and so on.  As particular cases, "*" always matches Target[1] and
"\"*\"" matches the first element starting and ending with '"'.

Examples:
  match(vector(1.3,2.4,1.3,5,5.1),vector(2.4,1.3),-1) returns
    vector(2,1,2,-1,-1)
  match(vector(1.3,2.4,1.3,5,2.4,?),vector(2.4,1.3)) returns
    vector(2,1,2,3,1,?)
  match(vector(1.3,2.4,1.3,5,2.4),run(3),-99,fuzz:.5) returns
    vector(1,2,1,-99,2)
  match(vector("A","B","A","C","B"),vector("B","A")) yields
    vector(2,1,2,3,1)
  a <- factor(match(x,sort(unique(x)))) transforms a REAL x to a factor
  unique(x)[match(x,unique(x))] yields x when x is a vector.
  match(scalarValue,vec,0) != 0 if and only scalarValue is in vec
  match("*c",vector("abc","ade","gfh"),exact:F) returns 1
  match("*d*",vector("abc","ade","gfh"),exact:F) returns 2
  match("g*",vector("abc","ade","gfh"),exact:F) returns 3
  match("g*h",vector("abc","ade","gfh"),exact:F) returns 3
  match("a*b*c",vector("abc","ade","gfh"),exact:F) returns 1
  match("a*b???",vector("aqbde","bb123", "allbdef"),exact:F) returns 3

In a macro, it can be helpful to know whether an argument is a an
explicit quoted string:
  if (match("\"*\"","$1",0,exact:F) != 0){
    print("arg 1 is a quoted string")
  }

See also unique(), 'macro_syntax'.


Gary Oehlert 2003-01-15