Условие "ИЛИ" в r с NA и пробелом

Я недавно видел проблему, которую я не понимаю. Здесь у вас есть:

 x <- c(1,2,3,4,45,654,3,NA," ",8,5,64,54)

И || состояние в r не работает в моих интересах: идентифицировать как NA, так и пробелы:

if(is.na(x) || x==" ") {...}

Я ожидаю if функция для возврата TRUE но это FALSE вместо. Кто-нибудь может помочь мне понять эту проблему здесь? Спасибо!

Редактировать:

Извините, ребята, я хотел использовать аргумент в if заявление, поэтому длина должна быть 1. | здесь не распространяется

1 ответ

Решение

Обратите внимание, что обе стороны || векторы

x <- c(1,2,3,4,45,654,3,NA," ",8,5,64,54)

is.na(x)
## [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

x == " "
## [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

и если любая сторона является вектором, то она просто использует свой первый элемент так

is.na(x) || x == " "
## [1] FALSE

такой же как:

is.na(x)[1] || (x == " ")[1]
## [1] FALSE

где обе стороны || являются FALSE в приведенной выше строке.

Если вы пытаетесь определить, является ли какой-либо элемент NA или же " " затем

anyNA(x) || ( " " %in% x )
## [1] TRUE

Вы также можете использовать any(x == " ") для правой стороны, но это работает только потому, что мы знаем, что правая часть не будет выполняться, если есть NA значения из-за левой стороны и того факта, что || никогда не бежит с правой стороны || если левая сторона TRUE (короткое замыкание). Если x были полностью NA затем any(x == " ") будет равно NA скорее, чем TRUE или же FALSE что делает тест на NA на левой стороне важно.

(Обратите внимание, что | это отличается. Это не короткое замыкание. Обе стороны оцениваются до | выполняется.)

Другие вопросы по тегам