Оценка логики короткого замыкания в операторе if - PullRequest
0 голосов
/ 21 сентября 2018

Я хочу добавить короткое замыкание в оператор if.Идея состоит в том, что если оба элемента refEndDate и последний элемент в endDateList имеют значение NA, не выполняйте вторую операцию, но по-прежнему возвращайте true.В настоящее время обе стороны && запускаются, что может привести к ошибке, если refEndDate или последняя запись в endDateList равны NA.

endDateList <- c('2018-01-01', '2018-01-03', NA)
refEndDate <- NA


(is.na(endDateList[length(endDateList)]) & is.na(refEndDate))
[1] TRUE

Возвращает TRUE, как и ожидалось.

(endDateList[length(endDateList)] != refEndDate)
[1] NA

Это возвращает NA, как и ожидалось, так как оба являются NA.

((is.na(endDateList[length(endDateList)]) & is.na(refEndDate)) &&
    (endDateList[length(endDateList)] != refEndDate))
[1] NA

Как мне получить выше, чтобы вернуть TRUE?

1 Ответ

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

Вам просто нужно использовать или вместо и.

((is.na(endDateList[length(endDateList)]) & is.na(refEndDate)) || 
       (endDateList[length(endDateList)] != refEndDate))
[1] TRUE

Вы должны понимать, что означает логический NA.NA означает, что значение неизвестно, , но оно все равно должно быть TRUE или FALSE.Другими словами, если оператор всегда оценивается в одну сторону, независимо от статуса значения NA, он не вернет NA.

Например, рассмотрим следующие случаи:

> TRUE || NA
[1] TRUE

> FALSE || NA
[1] NA

> TRUE && NA
[1] NA

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