Logical subsets are recycled to match the length of the vector (numerical subsets are not recycled).
From help("[")
:
Arguments
i, j, …
...
For [
-indexing only: i
, j
, …
can be logical vectors,
indicating elements/slices to select. Such vectors are recycled if
necessary to match the corresponding extent. i
, j
, …
can also be
negative integers, indicating elements/slices to leave out of the
selection.
When indexing arrays by [
a single argument i
can be a matrix with
as many columns as there are dimensions of x
; the result is then a
vector with elements corresponding to the sets of indices in each row
of i
.
To illustrate, try:
cbind.data.frame(x = 1:10, odd = c(TRUE, FALSE), even = c(FALSE, TRUE))
# x odd even
# 1 1 TRUE FALSE
# 2 2 FALSE TRUE
# 3 3 TRUE FALSE
# 4 4 FALSE TRUE
# 5 5 TRUE FALSE
# 6 6 FALSE TRUE
# 7 7 TRUE FALSE
# 8 8 FALSE TRUE
# 9 9 TRUE FALSE
# 10 10 FALSE TRUE