xts::to.weekly的indexAt="lastof"参数是否已失效?
xts::to.weekly 的 indexAt="lastof" 参数报错问题解析及解决
问题核心
这是xts包0.14.0版本中的已知bug,并非indexAt="lastof"参数失效。该bug仅影响to.weekly函数,to.monthly的对应逻辑未受影响,因此在R 4.3+版本中会触发你遇到的逻辑运算错误。
报错原因
报错信息Error in !missing(sec) && sec%%1 != 0 : 'length = 144' in coercion to 'logical(1)',是因为to.weekly处理indexAt="lastof"时,内部变量sec的长度不为1,导致需要单值逻辑判断的运算失败,属于函数内部逻辑的漏洞。
解决方案
方法1:手动替换周度数据索引
先生成默认周度聚合数据,再手动将索引替换为每周的最后一天日期:
set.seed(1234) len <- 1000 fake <- zoo::zoo(rnorm(len, mean = 0.001, sd = 0.0005), order.by = seq.Date(from = as.Date("2000-01-01", tz = "UTC"), length.out = len, by = "day")) # 生成默认周度数据 weekly_default <- xts::to.weekly(fake, OHLC = F, drop.time = T) # 获取原序列中每周的最后一天日期 library(lubridate) week_groups <- floor_date(index(fake), "week", week_start = 7) # 按周日作为周最后一天分组 last_days <- index(fake)[!duplicated(week_groups, fromLast = TRUE)] # 替换索引 lastof_weekly <- weekly_default index(lastof_weekly) <- last_days # 验证结果 head(lastof_weekly)
方法2:降级xts版本到0.13.1
该bug是在xts 0.14.0版本引入的,降级到旧版本可直接解决问题:
# 需要先安装devtools包(如果未安装) # install.packages("devtools") devtools::install_version("xts", version = "0.13.1")
方法3:安装xts开发版修复bug
该问题已在xts的开发分支中修复,可直接安装开发版:
devtools::install_github("joshuaulrich/xts")
内容的提问来源于stack exchange,提问作者nikrepj
相关产品推荐
相关产品推荐

