The answer to this question has two sides:
How is NA interpreted when indexing matrices?
In one of the links provided by @alexis_laz, I found a very well structured explanation of how TRUE
, FALSE
and NA
are interpreted when indexing matrices:
Logical
indices tell R
which elements to include or exclude.
You have three options: TRUE
, FALSE
and NA
They serve to indicate whether or not the index represented in that position should be included. In other words:
TRUE == "Include the elment at this index"
FALSE == "Do not include the element at this index"
NA == "Return NA instead of this index" # loosely speaking
For example:
x <- 1:6
x[ c(TRUE, FALSE, TRUE, NA, TRUE, FALSE)]
# [1] 1 3 NA 5
An important detail is that the default storage mode for an isolated NA
value is logical (try typeof(NA)
). You can choose the storage mode of the NA
by using NA_integer_
, NA_real_
(for double), NA_complex_
or NA_character_
.
Why 5 NA
and not just 1?
When the length of the indices is smaller than the length of vector x
, the indexing will start over to also index the values in x
that have not been indexed yet. In other words, R
will automatically "recycle" the indices:
(...) However, standard recycling rules apply. So in the previous example, if we drop the last FALSE
, the index vector is recycled, the first element of the index is TRUE
, and hence the 6th element of x
is now included
x <- 1:6
x[c(TRUE, FALSE, TRUE, NA, TRUE)]
# [1] 1 3 NA 5 6
Recall the detail about the storage mode from the previous section. If you type x[NA_integer_]
, then you will find a different result.