## Saturday, August 13, 2011

### 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