[R] "NA-friendly" operator

David Winsemius dwinsemius at comcast.net
Tue Oct 30 22:51:44 CET 2012


On Oct 30, 2012, at 2:25 PM, Berend Hasselman wrote:

> 
> On 30-10-2012, at 22:08, vincent guyader wrote:
> 
>> Hi everyone,
>> 
>> i'm looking for a "NA-friendly" operator
>> 
>> I explain :
>> 
>>       vec<-c(3,4,5,NA,1,NA,9,NA,1)
>> 
>>       vec[vec == 1]  # NA  1 NA NA  1
>> 
>> I dont want the NA's :
>>       vec[vec == 1 & ! is.na(vec)]# 1  1
>> is the same as
>>       vec[vec %in% 1] # 1  1
>> 
>> %in% is NA-friendly :)
>> 
>> But if i want >2 without the NA's :
>> 
>>       vec[vec>2] #3  4  5 NA NA  9 NA
>> 
>> if i dont want the NA i have to do :
>> 
>>       vec[vec>2 & !is.na(vec)] #3  4  5  9
>> 
>> is there an opérator to directly do that?
> 
> 
> You could define one
> 
> "%>.nona%" <- function(x,y) x[x>y & !is.na(vec)]
> 
> and use
> 
> vec %>.nona% 2
> 
> Use  ?`%in%` to see an example (in the Examples section)

Don't need to define a new operator. %in% will work fine:

vec<-c(3,4,5,NA,1,NA,9,NA,1)

vec[vec %in% 1]

(Seems a bit silly if you ask me. Using which would seem to provide more minforamtion.)

> which(vec==1)
[1] 5 9


-- 
David Winsemius, MD
Alameda, CA, USA




More information about the R-help mailing list