如何用R语言for循环替代硬编码执行10次预测并生成结果数据框
用for循环替代硬编码实现逻辑
原代码重复执行10次相同操作,改用for循环既能简化代码,后续模型数量变动时也不用逐一修改。具体实现如下:
test <- data # 初始化空列表统一存储各模型结果 result_list <- list() # 循环处理10个模型及对应列 for (i in 1:10) { # 动态生成当前要处理的u列名(如u_1、u_2...) u_col <- paste0("u_", i) # 筛选test中该u列为NA的行,提取所需字段 subset_data <- test[is.na(test[[u_col]]), c(u_col, "undesirable", "desirable")] # 调用对应模型做预测并转成数据框 result <- data.frame(predict(models[[i]], newdata = subset_data)) # 定位预测结果最大值的位置,存入列表 tec <- which(result == max(result), arr.ind = TRUE) result_list[[i]] <- tec } # 合并列表中所有结果 a <- do.call(rbind, result_list) # 整理为最终数据框 final_df <- data.frame(products = rownames(a)) colnames(final_df) <- c("products")
代码说明:
- 用
paste0("u_", i)动态生成列名,避免手动重复编写u_1到u_10 - 用列表
result_list统一存储循环结果,比零散的result1-result10变量更整洁易维护 do.call(rbind, result_list)自动合并所有列表元素,替代手动写10次rbind的繁琐操作- 最终数据框的整理逻辑和原硬编码代码完全一致
内容的提问来源于stack exchange,提问作者bergpot
相关产品推荐
相关产品推荐

