Есть эффект утилизации. В случае match
, если совпадений нет, по умолчанию nomatch = NA_integer
c(1, 3)[match(3, 1:2)]
#[1] NA
, в то время как OP использовал NA_logical_
, не указывая тип, и он просто перерабатывает NA
в length
вектора, т.е. 2. Если мы сделаем преобразование типа, получим тот же вывод
c(1, 3)[as.logical(match(3, 1:2))]
#[1] NA NA
То же самое можно повторить в обратном порядке
c(1, 3)[NA_integer_]
#[1] NA
Причина в том, что упоминается в ?NA
NA - логическая константа длины 1, которая содержит индикатор пропущенного значения. NA может быть приведен к любому другому векторному типу, кроме raw. Существуют также константы NA_integer_, NA_real_, NA_complex_ и NA_character_ других атомных c векторных типов, которые поддерживают пропущенные значения: все это зарезервированные слова в языке R.
Логические вычисления обрабатывают NA как пропущенную TRUE Значение / FALSE и т. Д. Может возвращать TRUE или FALSE, если выражение не зависит от операнда NA.