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

在R中将三维数组转换为函数型数据时遇维度不兼容错误求助

解决Data2fd中argvals与y维度不兼容的错误

错误原因

你遇到的错误是因为Data2fd的argvals参数传入了单个值1140,但y = sst2[i,j,]是长度为1140的向量。这个函数要求argvals的长度必须和每个y观测的长度完全匹配——每个y的元素都需要对应一个自变量(时间点)值,而不是只传一个总长度。

修正方案

  1. 修正argvals参数:把argvals = 1140改成argvals = 1:1140,这样自变量序列的长度和y一致,每个数据点对应一个时间点。
  2. 优化结果存储:原代码里每次循环都会覆盖tmpfdd,最后只能得到最后一组(i=128,j=64)的结果。建议用列表或矩阵式列表存储所有函数型数据对象。

修正后的代码

用列表存储所有结果

# 初始化列表,容量等于数组的前两维乘积
fdd_list <- vector("list", length = dim(sst2)[1] * dim(sst2)[2])
current_index <- 1

for (i in 1:dim(sst2)[1]) {
  for (j in 1:dim(sst2)[2]) {
    tmpfdd <- Data2fd(
      argvals = 1:1140,  # 匹配y长度的自变量序列
      y = sst2[i, j, ],
      basisobj = create.fourier.basis(nbasis = 15)
    )
    fdd_list[[current_index]] <- tmpfdd
    current_index <- current_index + 1
  }
}

用矩阵式列表保留二维结构

如果想保留原数组的128×64二维索引结构,可以用矩阵存储列表元素:

# 创建128行64列的矩阵,每个元素是列表
fdd_matrix <- matrix(vector("list", dim(sst2)[1]*dim(sst2)[2]), 
                     nrow = dim(sst2)[1], ncol = dim(sst2)[2])

for (i in 1:dim(sst2)[1]) {
  for (j in 1:dim(sst2)[2]) {
    fdd_matrix[[i,j]] <- Data2fd(
      argvals = 1:1140,
      y = sst2[i, j, ],
      basisobj = create.fourier.basis(nbasis = 15)
    )
  }
}

补充说明

如果你的数据对应的自变量不是从1到1140的整数(比如实际的日期序列),只需要把argvals替换成对应的长度为1140的序列即可,核心是保证argvals和y的长度一致。

内容的提问来源于stack exchange,提问作者Idris SI AHMED

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 10:55:14