Saturday, August 13, 2011

R - subscripting 3

subsetting with logical indices

  • elements corresponding to a TRUE in the subscript vector are selected, those corresponding to a FALSE are excluded, NAs in the the logical subscript vector produce NAs
my.vector <- letters[1:10] # vector of a...j
my.vector
 [1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j"
my.index <- rep(c(TRUE,FALSE),5) # the subscript vector (of length 10)
my.index
 [1]  TRUE FALSE  TRUE FALSE  TRUE FALSE  TRUE FALSE  TRUE FALSE
my.vector[my.index]
[1] "a" "c" "e" "g" "i"
  • if the subscript vector consists of less elements than the subscripted vector, it is repeated as many times as necessary (warning if the the vector length is not a multiple of the length of the subscript vector)
short.index <- c(T,F) # T is the same as TRUE, F as FALSE
short.index
[1]  TRUE FALSE
my.vector[short.index] # has the same result as above
[1] "a" "c" "e" "g" "i"
  • if the subscript vector is longer than the vector for every TRUE or NA entry without target a NA is produced
short.vector <- letters[1:3]
short.vector
[1] "a" "b" "c"
my.index <- rep(c(T,F,NA),2)
my.index
[1]  TRUE FALSE    NA  TRUE FALSE    NA
short.vector[my.index]
[1] "a" NA  NA  NA

No comments :

Post a Comment