我正在为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?
答案 0 :(得分:1)
您只需要使用or或代替and。
((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