Ответ 1
Может кто-нибудь объяснить, почему R ведет себя таким образом [?]
Краткий ответ: нет, вероятно нет.
Более длинный ответ: Давным-давно я думал о чем-то похожем и читал эту тему на R-devel: Определение [[
. В основном это сводится к:
Семантика
[
и[[
не представляется полностью определенной в Справочном руководстве. [...] Я предполагаю, что это функции, а не ошибки, но я не могу найти документацию для них
Дункан Мердок, бывший член основной команды R, дает очень хороший ответ:
На странице руководства для
Extract
есть больше документации, но я думаю, что она неполная. Самая полная документация - это, конечно, исходный код *, но он может не отвечать на вопрос о том, что является преднамеренным, а что случайным.
Как упомянуто в теме R-devel, единственное описание в руководстве - 3.4.1. Индексация по векторам:
Если
i
положительно и превышаетlength(x)
то соответствующий выбор равенNA
Но это относится к "индексированию простых векторов". Подобное индексирование вне границ для "непростых" векторов, по-видимому, не описано. Дункан Мердок снова:
Так что же такое простой вектор? Это явно не определено, и, вероятно, должно быть.
Таким образом, может показаться, что никто не знает ответа на ваш вопрос "почему".
См. Также "8.2.13 несуществующее значение в индексе" в превосходном R Inferno Патрика Бернса и раздел "Индексы отсутствия/выхода за пределы" в книге Хэдли.
* Исходный код для оператора [
subset. Поиск R_MSG_subs_o_b
(который соответствует сообщению об ошибке "индекс за пределами границ") не дает очевидной подсказки, почему OOB [
индексирование матриц и при использовании [[
выдают ошибку, тогда как OOB [
индексирование "простых векторов" приводит к NA
.