modeltime的ts_split_indices对象无法作为rsplit对象使用求助
问题原因
split_nested_timeseries()生成的是ts_split_indices类型的嵌套时间序列拆分对象,而training()是rsample包中针对常规rsplit对象设计的函数,二者不兼容,这就是触发错误的核心原因。
解决方案
使用modeltime包为嵌套时间序列拆分专门设计的工具函数,或者通过索引手动筛选训练数据:
方法1:专用提取函数
用extract_nested_train_split()直接提取嵌套拆分中的训练集,这是最简便的方式:
# 假设你的嵌套拆分对象名为nested_splits train_data <- extract_nested_train_split(nested_splits)
方法2:手动按索引筛选
如果需要更灵活的操作,可先取出单个拆分的索引,再从原始数据中筛选:
# 取出第一个嵌套拆分的索引集合 split_idx <- nested_splits$splits[[1]] # 从原始数据(假设为data)中筛选训练数据 train_data <- data[split_idx$train, ]
完整修正示例
结合典型的嵌套时间序列拆分流程,修正后的代码如下:
library(tidymodels) library(modeltime) library(tidyverse) # 示例数据 data <- m4_monthly %>% filter(id == "M750") # 生成嵌套时间序列拆分 nested_splits <- data %>% time_series_split(initial = 36, assess = 12, cumulative = TRUE) %>% split_nested_timeseries(lag = 12, window = 36) # 错误用法(会触发报错) # train_data <- training(nested_splits) # 正确用法1:专用函数提取 train_data1 <- extract_nested_train_split(nested_splits) # 正确用法2:手动索引筛选 train_data2 <- data[nested_splits$splits[[1]]$train, ]
补充说明
modeltime的嵌套时间序列拆分体系有专属的配套函数:比如extract_nested_test_split()用于提取测试集,modeltime_nested_fit()用于批量训练嵌套模型,建议优先使用这些专用函数,避免与rsample的常规拆分函数混淆。
内容的提问来源于stack exchange,提问作者Arcenis Rojas
相关产品推荐
相关产品推荐

