[R] vectorizing test for equality

ripley@stats.ox.ac.uk ripley at stats.ox.ac.uk
Fri Dec 20 09:30:04 CET 2002


> x <- c( 2, NA, 1, 5, 3)
> x %in% 5
[1] FALSE FALSE FALSE  TRUE FALSE

Knowledge like this is covered in chapter 2 of MASS4 (Venables & Ripley,
2002).

Note that your subject is misleading:  == does test for equality, but that
is not what you actually wanted.

On Fri, 20 Dec 2002, John Miyamoto wrote:

> Dear R Help,
>    I am trying to create a boolean vector that is TRUE whenever a
> particular value occurs in a numeric vector, and FALSE otherwise.  For
> example, suppose that
>
> > y <- c(5, 2, 4, 3, 1)
> > y
> [1] 5 2 4 3 1
>
> and suppose that I want to find where 3 occurs in y.  Then, the following
> yields the solution:
>
> > y == 3
> [1] FALSE FALSE FALSE  TRUE FALSE
>
> My problem arises when the numeric vector has missing values.  For
> example, suppose that x is the vector
>
> > x <- c( 2, NA, 1, 5, 3)
> > x
> [1]  2 NA  1  5  3
>
> Now x == 5 yields
>
> > x == 5
> [1] FALSE    NA FALSE  TRUE FALSE
>
> whereas what I want is
>
> FALSE  FALSE  FALSE  TRUE  FALSE
>
> I can solve this problem with a for loop:
>
> > flag <- NULL
> > for (i in 1:length(x)) flag <- c(flag, identical(x[i], 5))
> > flag
> [1] FALSE FALSE FALSE  TRUE FALSE
>
> Is there a way to avoid the for loop?  I'm also curious why the following
> does not work, because it seems to me it should:
>
> > test <- function(x) identical(x[1], x[2])
> > apply(cbind(x, 5), 1, test)
> [1] FALSE FALSE FALSE FALSE FALSE
>
> I was expecting to see FALSE FALSE FALSE TRUE FALSE.
>
> John Miyamoto
>
> --------------------------------------------------------------------
> John Miyamoto, Dept. of Psychology, Box 351525
> University of Washington, Seattle, WA 98195-1525
> Phone 206-543-0805, Fax 206-685-3157, Email jmiyamot at u.washington.edu
> Homepage http://faculty.washington.edu/jmiyamot/
> --------------------------------------------------------------------
>
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> http://www.stat.math.ethz.ch/mailman/listinfo/r-help
>

-- 
Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272860 (secr)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595




More information about the R-help mailing list