#r
#r
Вопрос:
Как я могу использовать grep()
для получения NAs из vector?
то есть: когда я пытаюсь grep(NA, c(1,NA))
Я получаю [1] NA NA
Ответ №1:
Вы хотите is.na()
:
> vec <- c(1,NA)
> is.na(vec)
[1] FALSE TRUE
Если вы хотите NA
, попробуйте
> which(is.na(vec))
[1] 2
> vec[which(is.na(vec))]
[1] NA
> vec[is.na(vec)] # simpler, logical subscripting
[1] NA
Если вы этого не сделаете, отмените вывод из is.na()
:
> !is.na(vec)
[1] TRUE FALSE
> which(!is.na(vec))
[1] 1
> vec[which(!is.na(vec))]
[1] 1
> vec[!is.na(vec)] ## simpler, logical subscripting
[1] 1
Одна из причин, по которой ваш код не работает, заключается в том, что вы указали NA
в качестве шаблона. Для R это означает, что шаблон не определен, поэтому, соответствует ли какой-либо из элементов вектора этому шаблону, также не определено — следовательно, оба находятся NA
в выходных данных.
Комментарии:
1.
vec[which(!is.na(vec))]
слишком сложно, его достаточно использоватьvec[!is.na(vec)]
.
Ответ №2:
grep
здесь неверный вариант. Вместо этого используйте встроенную функцию is.na
.
> is.na(c(1,NA))
[1] FALSE TRUE
РЕДАКТИРОВАТЬ: если вам нужны целочисленные индексы, а не значения true / false (что больше похоже на то, что grep
возвращается), используйте which(is.na())
.
Ответ №3:
Не делайте этого; используйте which
и is.na
вместо:
> which(is.na(c(1,NA)))
[1] 2
> which(is.na(c(NA,1,NA)))
[1] 1 3
Ответ №4:
Использовать is.na(c(1, NA))
.