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

在R语言中如何将循环生成的精度指标存储到数据框或矩阵?

解决R语言中存储循环生成的精度指标到数据框的问题

我来帮你把这段代码完善好,轻松把每列的时间序列拟合精度指标存到数据框里~

首先,你已经用auto.arima完成了对iris前4列的拟合,并且提取出了拟合值。接下来我们可以用forecast包自带的accuracy()函数直接计算常用的精度指标(比如RMSE、MAE、MAPE这些),然后把结果整理成结构化的数据框。

完整的代码示例

library(forecast)

# 创建数据框
df <- iris
# 对前4列的数值型变量拟合auto.arima
dfFitList <- lapply(df[, c(1:4)], forecast::auto.arima)
# 提取拟合值并转换为数据框
dfFitList <- lapply(dfFitList, '[', 'fitted')
dfFit <- as.data.frame.list(dfFitList)
colnames(dfFit) <- names(dfFitList)

# 方法1:用lapply批量计算并合并结果(更简洁高效)
accuracy_results <- lapply(names(dfFit), function(var_name) {
  # 对每个变量计算真实值与拟合值的精度指标
  acc <- accuracy(fitted = dfFit[[var_name]], x = df[[var_name]])
  # 把变量名和指标结果合并
  c(Variable = var_name, as.data.frame(acc))
})

# 将列表转换为数据框
result_df <- do.call(rbind, accuracy_results)
result_df <- as.data.frame(result_df)

# 方法2:用for循环逐步填充(适合理解过程)
# 先初始化数据框,以第一个变量的指标结构为模板
first_acc <- accuracy(dfFit[,1], df[,1])
result_df_loop <- data.frame(Variable = character(ncol(dfFit)), stringsAsFactors = FALSE)
result_df_loop <- cbind(result_df_loop, as.data.frame(first_acc))

# 循环每一列填充结果
for(i in 1:ncol(dfFit)){
  current_acc <- accuracy(dfFit[,i], df[,i])
  result_df_loop[i, "Variable"] <- colnames(dfFit)[i]
  result_df_loop[i, colnames(current_acc)] <- current_acc
}

代码说明

  • accuracy()函数是forecast包的实用工具,输入拟合值和真实值,会直接返回ME、RMSE、MAE、MPE、MAPE、MASE、ACF1等常用精度指标,省去自己手动计算的麻烦。
  • 两种方法各有优势:lapply写法更简洁,适合批量处理;for循环更直观,方便你理解每一步的执行逻辑。
  • 最终的result_df会以行的形式展示每个变量的所有精度指标,结构清晰,方便后续分析或导出。

内容的提问来源于stack exchange,提问作者fletchr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:08:50