[R] vector comparison
Bert Gunter
gunter.berton at gene.com
Thu Jun 5 16:17:08 CEST 2008
.. or identical(sort(unique(a)),sort(unique(b)))
-- Bert Gunter
Genentech Nonclinical Statistics
-----Original Message-----
From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On
Behalf Of jim holtman
Sent: Thursday, June 05, 2008 5:01 AM
To: Karin Lagesen
Cc: r-help at r-project.org
Subject: Re: [R] vector comparison
This may help:
> a <- c('a')
> b <- c('a','b','c')
> c <- c('a','b','d')
> all(a %in% b)
[1] TRUE
> all(b %in% a)
[1] FALSE
> all(b %in% c)
[1] FALSE
> d <- c('b', 'c')
> all(d %in% b)
[1] TRUE
>
What you probably want to insure that the vectors contain the same elements
is:
if (all(v1 %in$ v2) && all(v2 %in% v1))
On Thu, Jun 5, 2008 at 6:38 AM, Karin Lagesen <karinlag at studmed.uio.no>
wrote:
>
> I know this is fairly basic, but I must have somehow missed it in the
> manuals.
>
> I have two vectors, often of unequal length. I would like to compare
> them for identity. Order of elements do not matter, but they should
> contain the same.
>
> I.e: I want this kind of comparison:
>
> > if (1==1) show("yes") else show("blah")
> [1] "yes"
> > if (1==2) show("yes") else show("blah")
> [1] "blah"
> >
>
> Only replace the numbers with for instance the vectors
>
> > a = c("a")
> > b = c("b","c")
> > c = c("c","b")
>
>
> Now, I realize I only get a warning when comparing things, but this to
> me means that I am not doing it correctly:
>
> > if (a==a) show("yes") else show("blah")
> [1] "yes"
> > if (a==b) show("yes") else show("blah")
> [1] "blah"
> Warning message:
> In if (a == b) show("yes") else show("blah") :
> the condition has length > 1 and only the first element will be used
> >
> > if (b == c) show("yes") else show("blah")
> [1] "blah"
> Warning message:
> In if (b == c) show("yes") else show("blah") :
> the condition has length > 1 and only the first element will be used
> >
>
> I have also tried the %in% comparator, but that one throws warnings too:
>
> > if (b %in% c) show("yes") else show("blah")
> [1] "yes"
> Warning message:
> In if (b %in% c) show("yes") else show("blah") :
> the condition has length > 1 and only the first element will be used
> >
> > if (c %in% c) show("yes") else show("blah")
> [1] "yes"
> Warning message:
> In if (c %in% c) show("yes") else show("blah") :
> the condition has length > 1 and only the first element will be used
> >
>
> So, how is this really supposed to be done?
>
> Thanks!
>
> Karin
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
>
http://www.R-project.org/posting-guide.html<http://www.r-project.org/posting
-guide.html>
> and provide commented, minimal, self-contained, reproducible code.
>
--
Jim Holtman
Cincinnati, OH
+1 513 646 9390
What is the problem you are trying to solve?
[[alternative HTML version deleted]]
______________________________________________
R-help at r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
More information about the R-help
mailing list