Я только что обнаружил следующее поведение функции is.na()
, которое я не понимаю:
df <- data.frame(a = 5:1, b = "text")
df
## a b
## 1 5 text
## 2 4 text
## 3 3 text
## 4 2 text
## 5 1 text
is.na(df)
## a b
## [1,] FALSE FALSE
## [2,] FALSE FALSE
## [3,] FALSE FALSE
## [4,] FALSE FALSE
## [5,] FALSE FALSE
is.na(df) <- "0"
df
## a b 0
## 1 5 text NA
## 2 4 text NA
## 3 3 text NA
## 4 2 text NA
## 5 1 text NA
Мой вопрос
Почему is.na()
изменяет свой аргумент (и в этом случае добавляет дополнительный столбец в кадр данных)? В этом случае его поведение кажется дополнительным загадочным (или, по крайней мере, неожиданным), потому что результат запроса FALSE
для всех экземпляров.
NB
Этот вопрос заключается не в подмножестве и изменении значений NA
в кадре данных - я знаю, как это сделать (df[is.na(df)] <- "0"
). Этот вопрос касается поведения функции is.na
! Почему назначение функции is.something
меняет сам аргумент - это неожиданно.