is.na
из документов возвращает:
Метод по умолчанию для is.na, примененный к атомарному вектору, возвращает логический вектор такой же длины, что и его аргумент x, содержащий значение TRUE для этих элементов.помеченный NA или, для числовых или комплексных векторов, NaN и FALSE в противном случае.
Поэтому, создавая логический вектор (по сути, вы говорите, где индекс равен TRUE
, это должно бытьNA
.
«Сопоставляя» эти индексы с соответствующим индексом из which
, вы превращаете последний в NA
s везде, где FALSE
отсюда и происходит изменение.
Для практического применения:
Это вывод из is.na(x1)
:
is.na(x1)
[1] FALSE FALSE FALSE TRUE FALSE
Соответствующий вывод из which(x==7)
:
which(x1 == 7)
[1] 5
Объединение, элемент в позиции 5 теперь станет NA
, потому что ему был присвоен логический is.na()
, который возвращает TRUE
is.na(x1) <- which(x1 == 7)
x1
[1] 1 4 3 NA NA
. Вышеуказанное превращает первый индекс вNA
и appends
еще два NA
с, чтобы сделать индекс 7 и NA
.
Это лучше всего видно по:
is.na(x1) <- c(1,7)
x1
[1] NA 4 3 NA 7 NA NA
Сравните с этим примером из документов:
(xx <- c(0:4))
is.na(xx) <- c(2, 4)
xx
[1] 0 NA 2 NA 4
Из приведенного выше ясно, что c (2,4) следует исходным индексам в xx
, поэтому остальные становятся NA
с.