R语言循环未追加所有预测值问题求助
看起来你在循环处理不同EMI值的预测时遇到了结果丢失的问题,我来帮你分析下代码里的问题,然后给出两种符合你需求的解决方案:
首先,你的原始代码有几个关键问题:
- 初始化结果数据框
v的方式不对,空的单列表格和table()返回的列联表结构不匹配,多次rbind后会导致数据混乱,最终只留下最后一次的结果; - 直接修改
newdata而没有创建副本,虽然循环里每次会覆盖EMI.Amount,但这种操作可能会意外修改原数据集,风险很高; - 没有把EMI值和对应的预测结果关联起来,就算成功保存了数据,你也没法区分哪组结果对应哪个EMI值。
接下来分两种情况给你解决方案:
情况1:想要每个EMI值对应的二分类预测计数(即0和1的观测数量)
这种方案会生成一个包含EMI值、0类预测数、1类预测数的结果数据框:
# 创建EMI向量 em <- c(10000,20000,30000,40000,50000,60000,70000,80000,90000,100000) # 提前初始化结果数据框,明确列结构 result_counts <- data.frame( EMI = numeric(), Predicted_0 = integer(), Predicted_1 = integer(), stringsAsFactors = FALSE ) for(i in em){ # 复制原测试数据,避免修改原始数据集 temp_data <- newdata temp_data$EMI.Amount <- i # 执行预测 prediction <- predict(rf, temp_data, type="response") # 统计二分类结果的数量,转换为数据框格式 pred_table <- as.data.frame(table(prediction)) # 整理成一行数据,关联当前EMI值 current_row <- data.frame( EMI = i, Predicted_0 = pred_table[pred_table$prediction == 0, "Freq"], Predicted_1 = pred_table[pred_table$prediction == 1, "Freq"] ) # 将当前行合并到结果数据框 result_counts <- rbind(result_counts, current_row) } # 查看最终结果 print(result_counts)
情况2:想要给原测试数据集新增列,每个列对应一个EMI值的预测结果
这种方案会在你的88行测试数据中,新增10列,每列对应一个EMI值下的预测结果:
# 创建EMI向量 em <- c(10000,20000,30000,40000,50000,60000,70000,80000,90000,100000) # 复制原测试数据,避免修改原始数据集 final_test_data <- newdata for(i in em){ # 创建临时数据副本,修改EMI值 temp_data <- newdata temp_data$EMI.Amount <- i # 执行预测 prediction <- predict(rf, temp_data, type="response") # 给新列命名,方便识别对应哪个EMI col_name <- paste0("Pred_EMI_", i) # 将预测结果作为新列加入最终数据框 final_test_data[[col_name]] <- prediction } # 查看最终结果(原数据+10个预测列) print(final_test_data)
这两种方案都能解决你原来的问题,你可以根据自己的实际需求选择其中一种。
内容的提问来源于stack exchange,提问作者danishxr
相关产品推荐
相关产品推荐

