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

使用as_fable()创建fable对象时遭遇'dimnames' applied to non-array错误的技术求助

as_fable()创建fable对象时遭遇'dimnames' applied to non-array错误的技术求助

大家好,我最近在用树基模型做完预测后,想把生成的tsibble转换成fable对象,结果遇到了一个报错,实在搞不懂原因,麻烦各位帮忙看看!

问题背景

我已经用树基方法生成了预测结果,存成了一个名为fc_cart的tsibble,里面有两列关键数据:yhat是预测值,boot是用来计算预测区间的自举残差(用distributional包生成的样本分布)。

当我执行下面的代码尝试转成fable对象时:

fable_cart <- as_fable(fc_cart, response="yhat", distribution="boot")

直接抛出了错误:

Error in dimnames(fbl[[distribution]]) <- response :
'dimnames' applied to non-array

In addition: Warning message:
The dimnames of the fable's distribution are missing and have been set to match the response variables.

我的数据结构

先给大家看看fc_cart的结构(前两行):

print(fc_cart,n=2)

# A tsibble: 365 x 3 [1D]
date        yhat boot
<date>     <dbl> <list>
1 2022-01-01  121. <dst_smpl[1d]>
2 2022-01-02  121. <dst_smpl[1d]>
# ℹ 363 more rows

boot列的生成方式

boot列是我用循环生成的,下面是简化后的代码(实际是基于训练集残差做的自举,这里用rnorm代替):

for (i in 1:nrow(fc_cart)) {
  my_dist <- distributional::dist_sample(
    list(
      rnorm(1000)
    )
  )
  fc_cart$boot[i] <- my_dist
}

问题原因&解决方案

我查了fable包的文档和相关讨论后,发现问题出在dist_sample的结构上:

fable要求分布列中的每个元素必须带有和响应变量匹配的名称维度,而当前生成的dist_sample是一个没有命名的一维样本,as_fable在尝试给它设置dimnames时就会报错。

解决方法很简单,只要在创建dist_sample的时候给样本指定名称,和你在as_fable中设置的response参数对应就行:

方案1:修改循环中的dist_sample创建

for (i in 1:nrow(fc_cart)) {
  # 给样本列表指定名称为yhat,和响应变量一致
  my_dist <- distributional::dist_sample(
    list(yhat = rnorm(1000))
  )
  fc_cart$boot[i] <- my_dist
}

方案2:用dist_sample_matrix更规范地生成

for (i in 1:nrow(fc_cart)) {
  # 生成带列名的矩阵,列名为yhat
  sample_mat <- matrix(rnorm(1000), ncol = 1, dimnames = list(NULL, "yhat"))
  my_dist <- distributional::dist_sample_matrix(sample_mat)
  fc_cart$boot[i] <- my_dist
}

方案3:用purrr实现向量化操作(更高效)

如果你习惯用tidyverse风格的代码,可以用map代替循环,代码更简洁:

library(purrr)

fc_cart <- fc_cart %>%
  mutate(boot = map(1:n(), ~distributional::dist_sample(list(yhat = rnorm(1000)))))

修改完boot列后,再运行as_fable(fc_cart, response="yhat", distribution="boot"),应该就能成功生成fable对象了!


备注:内容来源于stack exchange,提问作者Mat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 09:19:37