я только обнаружил следующее поведение функции is.na()
, которую я не понимаю:Почему 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
меняет сам аргумент - это неожиданно.
Вы должны использовать эти логические переменные в качестве ссылки на индекс, то есть 'df [is.na (df)] <- 0' – Sotos
@ Сото: Посмотрите мои комментарии. – vonjd
@vonjd Я видел ваш комментарий, но я хочу сказать, что ваше назначение не работает, даже если есть значения NA, то есть 'df $ a [3] <- NA; is.na (df) <- "0" ' – akrun