Условие "ИЛИ" в 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
на левой стороне важно.
(Обратите внимание, что |
это отличается. Это не короткое замыкание. Обе стороны оцениваются до |
выполняется.)