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

如何使用FOR循环计算多个dataframe的AUC指标并存储结果

实现方案
  • 原代码存在两处可优化点:计算ROC时硬编码了iris$Species,需要替换为当前循环中数据集的真实标签,避免所有数据集计算出的AUC都对应iris数据集;补充结果写入矩阵的逻辑,建议通过索引遍历数据集列表,更易定位结果存储位置

完整可运行代码

require(pROC)
require(randomForest)

# 预处理iris数据集作为示例
data(iris)
iris <- iris[-which(iris$Species=="setosa"),]
iris$Species <- as.factor(as.character(iris$Species))

# 构造数据集列表,可自定义添加任意多数据集
df1 <- iris
df2 <- iris
# 可以给数据集命名,后续结果列名直接复用
df_list <- list(数据集1 = df1, 数据集2 = df2)

# 动态生成空结果矩阵,列数和数据集数量一致,行存储AUC值
results_matrix <- matrix(ncol = length(df_list), nrow = 1,
                         dimnames = list("AUC值", names(df_list)))

# 循环遍历每个数据集计算AUC
for (i in seq_along(df_list)) {
  current_df <- df_list[[i]]
  # 训练随机森林
  rf_model <- randomForest::randomForest(Species ~ ., data = current_df)
  # 计算ROC和AUC,用当前数据集的标签,不要硬编码iris$Species
  rf_roc <- roc(current_df$Species, rf_model$votes[,2])
  current_auc <- as.numeric(auc(rf_roc))
  # 写入结果矩阵对应位置
  results_matrix[1, i] <- current_auc
}

# 打印结果
print(results_matrix)

# 如果需要转成dataframe后续处理用
results_df <- as.data.frame(results_matrix)

扩展说明

  • 如果需要新增数据集,仅需要把数据集加入df_list即可,results_matrix的列数可以直接用length(df_list)动态生成,无需手动修改
  • 如果需要多次重复实验取AUC均值,只需要修改results_matrix的行数为重复次数,每一行存储一次实验的所有数据集AUC结果
  • 如果不同数据集的响应变量名不一致,可以把数据集和响应变量名配对存储,例如列表每个元素为list(df=xxx, y_col="响应变量名"),循环中动态读取对应列即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 08:21:02