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

R中split生成的列表如何通过循环变量i正确调用元素进行回归分析

问题原因

你调用split生成的列表元素的写法是错误的。
R中$运算符后的内容会被解析为固定字符串,你写的X$i``不会读取循环变量i的取值,而是固定查找列表X中名为i的元素。因为你的列表X中不存在该元素,$运算符会返回NULL,此时lm的data参数为NULL时会自动从全局环境中查找a、b、c变量,也就是你最开始定义的那套固定的a = rnorm(300,10,5)等数据,所以每次循环跑的都是完全相同的回归,才会出现所有系数完全一致的异常结果。

修复方案

把列表元素的访问方式改为双括号索引即可,两种可行写法:

  • 按列表位置索引(推荐,写法更简洁):直接用X[[i]]访问第i个迭代的数据集
  • 按列表名称索引:如果需要严格匹配iteration的名称,用X[[as.character(i)]]

修复后的循环代码如下:

results_1 <- list()
for (i in 1:100){
  # 替换原来的X$`i`为X[[i]]即可
  model_i <- lm(a ~ b + c, data = X[[i]])
  coeff_i = model_i$coefficients
  results_1[[i]] <- coeff_i 
}
results_df_1 <- do.call(rbind.data.frame, results_1)

可选优化写法

你不需要先拆分数据集再循环回归,直接用dplyr的分组拟合逻辑可以一步得到结果,代码更简洁:

library(dplyr)
results_df_1 <- results_df %>%
  group_by(iteration) %>%
  summarise(
    intercept = coef(lm(a ~ b + c))[1],
    b_coef = coef(lm(a ~ b + c))[2],
    c_coef = coef(lm(a ~ b + c))[3]
  )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 03:27:02