[R] Why does a[which(b == c[d])] not work?

Gabor Grothendieck
Wed, 08 Oct 2003 16:38:28 -0000

Here are some different ways of doing this. Don't know whether any
could be considered superior to the others.

# y[x==5] regarding NAs in x as not matching
x <- c(5, NA, 7, 5, NA, 3)
y <- c(1,  2, 3, 4,  5, 6)
subset(y,x==5)
y[x %in% 5]
y[x %in% c(5)]
y[which(x==5)]


---
Date: Wed, 08 Oct 2003 08:58:32 -0600
From: Tony Plate <tplate at blackmesacapital.com>

At Wednesday 03:06 PM 10/8/2003 +0200, Martin Maechler
wrote:
>Your question has been answered by Achim and Peter Dalgaard (at least).
>
>Just a note:
>
>Using
> a[which(logic)]
>looks like a clumsy and inefficient way of writing
> a[ logic ]
>
>and I think you shouldn't propagate its use ...

What then is the recommended way of treating an NA in the logical subset as
a FALSE? (Or were you just talking about the given example, which didn't
have this issue. However, you admonition seemed more general.)

As in:
> x <- 1:4
> y <- c(1,2,NA,4)
> x[y %% 2 == 0]
[1] 2 NA 4
> x[which(y %% 2 == 0)]
[1] 2 4
>

Sometimes one might want the first result, but more usually, I want the
second, and using which() seems a convenient way to get it.

-- Tony Plate


_______________________________________________
No banners. No pop-ups. No kidding.
Introducing My Way - http://www.myway.com