[R] when to use `which'?

David Winsemius dwinsemius at comcast.net
Tue Jul 12 22:29:10 CEST 2011


On Jul 12, 2011, at 4:17 PM, Sam Steingold wrote:

> when do I need to use which()?
>> a <- c(1,2,3,4,5,6)
>> a
> [1] 1 2 3 4 5 6
>> a[a==4]
> [1] 4
>> a[which(a==4)]
> [1] 4
>> which(a==4)
> [1] 4
>> a[which(a>2)]
> [1] 3 4 5 6
>> a[a>2]
> [1] 3 4 5 6
>>
>
> seems unnecessary...
>

It is unnecessary when `a` is a toy case and has no NA's. And you will  
find some of the cognoscenti trying to correct you when you do use  
which().

a <- c(1,2, NA ,3,4, NaN, 5,6)

 > data.frame(lets= letters[1:8], stringsAsFactors=FALSE)[a>0, ]
[1] "a" "b" NA  "d" "e" NA  "g" "h"
 > data.frame(lets= letters[1:8], stringsAsFactors=FALSE)[which(a>0), ]
[1] "a" "b" "d" "e" "g" "h"

If you have millions of records and tens of thousands of NA's (say ~  
1% of the data), imagine what your console looks like if you try to  
pick out records from one day and get 10,000 where you were expecting  
100. A real PITA when you are doing real work.

-- 
David Winsemius, MD
West Hartford, CT



More information about the R-help mailing list