Как проверить, содержит ли список `NA`? - PullRequest
0 голосов
/ 10 сентября 2018

Когда правая часть является вектором, %in% может использоваться для проверки NA s:

> NA %in% c(NA, 2)
[1] TRUE
> NA %in% c(1, 2)
[1] FALSE
> 1 %in% c(NA, 2)
[1] FALSE
> 1 %in% c(1, 2)
[1] TRUE

Когда правая часть является списком, %in% ведет себя по-разному:

> NA %in% list(NA, 2)
[1] FALSE
> NA %in% list(1, 2)
[1] FALSE
> 1 %in% list(NA, 2)
[1] FALSE
> 1 %in% list(1, 2)
[1] TRUE

Это ошибка или функция?Это описано в документации?

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

Чтобы ответить на мой второй вопрос: Да, это явление описано в документации (конечно):

Факторы, необработанные векторы и списки преобразуются в символьные векторы [...]

Таким образом, list(NA, 2) приводится к c("NA", "2").Очевидно, NA не в c("NA", "2").Таким образом, следует использовать anyNA.

Мое личное сообщение о возвращении домой: старайтесь избегать %in%, когда правая часть состоит из списков.

0 голосов
/ 10 сентября 2018

Мы можем использовать anyNA

anyNA(list(NA, 2))

если list имеет vector с длиной> 1, тогда используйте recursive = TRUE

anyNA(list(c(1, 2), c(NA, 1)), recursive = TRUE)
#[1] TRUE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...