R '中的短路逻辑评估;如果';陈述
我想在if语句中添加一个短路。其思想是,如果refEndDate和endDateList中的最后一项都为NA,则不执行第二个操作,但仍返回true。当前,R '中的短路逻辑评估;如果';陈述,r,R,我想在if语句中添加一个短路。其思想是,如果refEndDate和endDateList中的最后一项都为NA,则不执行第二个操作,但仍返回true。当前,&&的两侧都会运行,如果refEndDate或endDateList中的最后一个条目为NA,则可能会导致错误 endDateList <- c('2018-01-01', '2018-01-03', NA) refEndDate <- NA (is.na(endDateList[length(endDateList)]) &am
&&
的两侧都会运行,如果refEndDate或endDateList中的最后一个条目为NA,则可能会导致错误
endDateList <- c('2018-01-01', '2018-01-03', NA)
refEndDate <- NA
(is.na(endDateList[length(endDateList)]) & is.na(refEndDate))
[1] TRUE
这会像预期的那样返回NA,因为两者都是NA
((is.na(endDateList[length(endDateList)]) & is.na(refEndDate)) &&
(endDateList[length(endDateList)] != refEndDate))
[1] NA
如何使上述结果返回TRUE?您只需要使用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
第二句话是什么意思?如果1为真,则无论值为2,结果都应为
true
。如果1为false,那么结果应该为false(因为您在那里放置了&
)。我说得对吗?
> TRUE || NA
[1] TRUE
> FALSE || NA
[1] NA
> TRUE && NA
[1] NA
> FALSE && NA
[1] FALSE