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 ______________________________________________ R-help@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.