在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
相关产品推荐
相关产品推荐

