如何在lubridate中实现Period类型时间除以整数?
Lubridate中Period类型无法直接除以整数的问题解决
问题场景
Lubridate简化了时间处理,但部分用法容易混淆。比如计算单位距离用时:跑5公里耗时24分30秒,想求跑1公里的时间。
先用as.period()生成对应的时间对象:
# 生成Period类型的时间对象 as.period(ms("24:30")) # 输出结果:[1] "24M 30S"
尝试直接将这个Period对象除以5时,程序抛出错误:
as.period(ms("24:30"))/5 # 错误提示: # Error in validObject(.Object) : # invalid class “Period” object: periods must have integer values
错误原因
Period类型的核心特性是没有固定时长(比如“1个月”的实际时长可能是28、30或31天),因此它的所有属性值必须是整数。直接对Period做除法会产生非整数值,违反了Period对象的有效性规则,导致报错。
解决方案
先把Period转换为Duration类型(Duration代表固定时长的时间间隔,底层以秒为单位计算),完成除法运算后再转回Period:
as.period(as.duration(ms("24:30"))/5) # 输出结果:[1] "4M 54S"
内容的提问来源于stack exchange,提问作者r0berts
相关产品推荐
相关产品推荐

