R语言中含日期的While多条件判断异常问题
R语言while循环日期多条件失效问题解决
问题根因
你用的&&是标量逻辑运算符,它只对两个向量的第一个元素做判断,但xxx$mdate是日期时间向量,用&&连接条件时,只会检查向量第一个元素是否符合要求,自然和你预期的“所有元素满足过去两天”逻辑不符。单个条件时虽然能运行,但其实是R把向量逻辑值强制转换成了单个值,结果未必符合真实需求。
对应解决方案
根据你的实际需求选择以下方法:
需求1:所有元素都满足条件才执行循环
如果循环要在xxx$mdate里所有日期都处于过去两天(≥Sys.Date()-2且<Sys.Date())时运行,用all()配合向量运算符&:
while (all(xxx$mdate >= Sys.Date()-2 & xxx$mdate < Sys.Date())) { # 这里写你的循环执行代码 }
需求2:逐个处理满足条件的元素
如果是要遍历每个日期,只对符合条件的元素执行逻辑,换用索引遍历的方式更靠谱:
i <- 1 while (i <= length(xxx$mdate)) { current_date <- xxx$mdate[i] if (current_date >= Sys.Date()-2 & current_date < Sys.Date()) { # 处理当前符合条件的日期 } i <- i + 1 }
核心提醒
- 向量之间的逻辑判断要用
&,它会逐个元素比对,返回同长度的逻辑向量; &&只用来判断单个标量值,别拿它处理向量条件。
内容的提问来源于stack exchange,提问作者Eric
相关产品推荐
相关产品推荐

