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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:51:40