Почему x [NA] дает вектор NA такой же длины, как x?
Код похож на этот
x <- 1:5
x[NA]
Почему он производит 5 НС?
Ответ 1
Ответ на этот вопрос имеет две стороны:
Как интерпретируется NA при индексировании матриц?
В одной из ссылок, предоставленной @alexis_laz, я нашел очень хорошо структурированное объяснение того, как TRUE, FALSE и NA интерпретируются, когда матрицы индексирования:
Logical указывают R, какие элементы включать или исключать.
У вас есть три варианта: TRUE, FALSE и NA
Они служат для указания того, должен ли включаться индекс, представленный в этой позиции. Другими словами:
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
Например:
x <- 1:6
x[ c(TRUE, FALSE, TRUE, NA, TRUE, FALSE)]
# [1] 1 3 NA 5
Важной деталью является то, что режим хранения по умолчанию для изолированного значения NA логичен (попробуйте typeof(NA)). Вы можете выбрать режим хранения NA, используя NA_integer_, NA_real_ (для двойного), NA_complex_ или NA_character_.
Почему 5 NA, а не только 1?
Когда длина индексов меньше длины вектора x, индексирование начнет также индексировать значения в x, которые еще не были проиндексированы. Другими словами, R автоматически "перерабатывает" индексы:
(...) Однако применяются стандартные правила утилизации. Таким образом, в предыдущем примере, если мы опустим последний FALSE, индексный вектор будет возвращен, первый элемент индекса будет TRUE, и, следовательно, теперь будет включен 6-й элемент x
x <- 1:6
x[c(TRUE, FALSE, TRUE, NA, TRUE)]
# [1] 1 3 NA 5 6
Вспомните подробную информацию о режиме хранения из предыдущего раздела. Если вы наберете x[NA_integer_], то вы найдете другой результат.