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

R语言循环运行模型后将所有模型估计结果存储至数据框

解决循环仅保留最后一次迭代结果的问题

核心问题是你在循环里直接用fixed <- ...和rand <- ...赋值,每次迭代都会覆盖上一次的结果,所以最后只留下了最后一次的输出。要保存所有迭代结果,得用列表累积的方式来实现,具体步骤和代码如下:

实现步骤

  1. 提前创建两个空列表,分别用来存每次迭代的固定效应和随机效应结果
  2. 在循环内部,给当前迭代的结果加个迭代序号列,方便后续对应到post_fit_use的行
  3. 把当前迭代的结果存入对应的列表
  4. 循环结束后,把列表里的所有小数据框合并成完整的数据集

代码示例

# 初始化空列表,用来存每一次的结果
fixed_list <- list()
rand_list <- list()

# 遍历post_fit_use的每一行
for (i in 1:nrow(post_fit_use)) {
  # 提取当前行的参数
  current_params <- post_fit_use[i, ]
  
  # 生成新数据集(替换成你实际的生成代码)
  new_data <- your_data_generator(current_params)
  
  # 拟合lmer模型
  lmer_model <- lmer(your_model_formula, data = new_data)
  
  # 提取固定效应和随机效应
  fixed_result <- tidy(lmer_model, effects = "fixed")
  rand_result <- tidy(lmer_model, effects = "ran_vals")
  
  # 加迭代序号,标记这是第i次循环的结果
  fixed_result$iter <- i
  rand_result$iter <- i
  
  # 把当前结果存入列表
  fixed_list[[i]] <- fixed_result
  rand_list[[i]] <- rand_result
}

# 合并所有迭代的结果,得到完整数据框
final_fixed_data <- dplyr::bind_rows(fixed_list)
final_rand_data <- dplyr::bind_rows(rand_list)

关键说明

  • 用列表存储是因为列表可以容纳多个数据框,不会像直接赋值那样覆盖之前的内容
  • iter列能帮你把结果和post_fit_use里的参数行对应起来,后续分析更方便
  • 如果没装dplyr包,也可以用do.call(rbind, fixed_list)来合并列表,但bind_rows对不同列结构的兼容性更好

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 01:55:13