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

如何用lapply按组拟合回归并在原数据集生成预测值

R语言使用lapply实现分组回归并新增预测值列

你的原始循环逻辑可以直接迁移为lapply实现,以下是两种常用写法:

写法1:完全对标原始循环逻辑

直接遍历每个分组ID,填充原数据集的预测值列:

# 生成示例数据
data <- data.frame(x = rnorm(100), y = rnorm(100), id = rep(c('a', 'b', 'c', 'd'), 25))

# 初始化预测值列(可选,提前定义避免作用域问题)
data$pred <- NA

invisible(lapply(unique(data$id), function(i) {
  sub_data <- subset(data, id == i)
  model <- lm(y ~ x, data = sub_data)
  # 使用<<-超赋值运算符修改外层的data对象
  data$pred[data$id == i] <<- predict(model, sub_data)
}))

说明:invisible用来隐藏lapply默认返回的列表,避免控制台输出无用内容。

写法2:无副作用的函数式写法

不直接修改外层变量,通过合并lapply返回的分组结果得到最终数据集,稳定性更高:

data <- data.frame(x = rnorm(100), y = rnorm(100), id = rep(c('a', 'b', 'c', 'd'), 25))

# lapply返回每个分组的建模结果+预测值
pred_res <- lapply(unique(data$id), function(i) {
  sub_data <- subset(data, id == i)
  model <- lm(y ~ x, data = sub_data)
  return(transform(sub_data, pred = predict(model, sub_data)))
})

# 按行合并所有分组的结果
data <- do.call(rbind, pred_res)

说明:该写法不需要处理作用域问题,也方便单独调试每个分组的建模结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 15:09:04