Проверка значений NA и разницы - PullRequest
1 голос
/ 26 марта 2020

В чем разница между sum(is.na(bollywood), T) и sum(is.na(bollywood))?

Я пробовал оба из них, но они дают разные результаты, и я не уверен в причине.

1 Ответ

1 голос
/ 26 марта 2020

T в конце для аргумента na.rm. Лучше прописать TRUE вместо T, поскольку невозможно присвоить TRUE в качестве имени объекта, тогда как T может быть назначено, и это может привести к ошибочным ситуациям

sum(is.na(bollywood, na.rm = TRUE)

Здесь нет необходимости в na.rm, поскольку is.na возвращает только TRUE / FALSE в качестве вывода в зависимости от того, имеет ли элемент объекта NA или нет. sum даст сумму всех ИСТИННЫХ элементов (TRUE - 1, FALSE - 0)


Используя небольшой воспроизводимый пример

bollywood <- c('a', 'b', NA, 'd',  NA)
is.na(bollywood)
#[1] FALSE FALSE  TRUE FALSE  TRUE

здесь, там два NA с, поэтому sum возвращает 2

sum(is.na(bollywood))
#[1] 2

Теперь мы определяем объект T

T <- 5
sum(is.na(bollywood), T)
#[1] 7

Итак, здесь он добавляет 2 с T вместо этого значение 5

должно быть

sum(is.na(bollywood), na.rm = TRUE)
#[1] 2

Как отмечалось выше, na.rm вообще не требуется. Если мы проверим документацию ?sum, используется

sum(..., na.rm = FALSE)

, т.е. ... может принимать несколько аргументов, поэтому is.na(bollywood) будет первым аргументом, T (созданный объект) второй аргумент и т. д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...