You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言tidyquant包EOMONTH函数偏移1月返回NA异常咨询

问题说明

在tidyquant 1.0.4版本下运行如下代码时,EOMONTH(sdt, 1)返回NA,预期应返回2019年2月28日;EOMONTH(sdt, 2)可正常返回结果,相同逻辑在Excel原生EOMONTH函数中运行无异常。

library(tidyquant)
sdt <- as.Date("2019-01-31")
EOMONTH(sdt, 1)
EOMONTH(sdt, 2)

运行环境信息:

  • R版本:4.1.2(Bird Hippie)
  • tidyquant版本:1.0.4
结论

这是tidyquant 1.0.4版本中EOMONTH函数的实现bug,和使用方式无关。
该版本EOMONTH的内部计算逻辑存在疏漏:先将输入日期直接偏移指定月数,再取结果所在月的最后一天,没有处理「输入日期为当月月末,偏移后目标月份无对应日期」的场景。以输入2019-01-31、偏移1个月为例,内部先尝试计算2019-01-31加1个月的日期,2月不存在31日,这一步直接生成NA,后续取月末的逻辑没有做容错处理,最终返回NA;偏移2个月时3月存在31日,偏移步骤正常得到2019-03-31,取月末后结果正常。
Excel原生EOMONTH的逻辑是直接计算偏移n个月所在月份的最后一天,不会先做日期日度值的匹配,因此不会出现该问题。

临时替代方案

未升级到修复该问题的包版本前,可以使用如下自定义函数实现和Excel一致的EOMONTH逻辑:

EOMONTH <- function(date, offset = 0) {
  date <- as.Date(date)
  dt_lt <- as.POSIXlt(date)
  dt_lt$mon <- dt_lt$mon + offset
  dt_lt$mday <- 1
  as.Date(dt_lt) - 1
}

测试验证:

  • EOMONTH(as.Date("2019-01-31"), 1) 返回2019-02-28,符合预期
  • EOMONTH(as.Date("2019-01-31"), 2) 返回2019-03-31,和原函数正常场景结果一致

内容的提问来源于stack exchange,提问作者rmacey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 20:48:14