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

如何从DataFrame批量创建多个线性回归模型?

批量创建单变量线性回归模型

示例数据

首先是你提供的模拟数据:

x1 <- rnorm(30, mean = 1, sd = 1)
x2 <- rnorm(30, mean = 1, sd = 2)
x3 <- rnorm(30, mean = 1, sd = 3)
eps <- rnorm(30)
y <- 2+x1+3*x2+x3+eps
df <- data.frame(x1,x2,x3,y)

问题分析

你尝试用purrr::map或lapply直接遍历数据框列拟合模型,但这类写法存在问题:遍历列时传入的是单独的向量,lm无法在当前环境中关联到y,且会错误地对y列也拟合模型,达不到你想要的y~x1、y~x2、y~x3模型列表效果。

正确解法

方法1:tidyverse(purrr)风格

通过提取自变量列名,动态构建公式来拟合模型:

library(purrr)

# 筛选出自变量列名(排除y)
x_cols <- setdiff(names(df), "y")

# 遍历列名,逐个拟合模型
model_list <- map(x_cols, ~lm(as.formula(paste("y ~", .x)), data = df))

# 给列表元素命名(可选,方便后续调用)
names(model_list) <- x_cols

方法2:base R风格

用lapply结合匿名函数实现同样效果:

x_cols <- setdiff(names(df), "y")

model_list <- lapply(x_cols, function(col) {
  lm(formula = paste("y ~", col), data = df)
})

names(model_list) <- x_cols

验证结果

运行后model_list的结构和你手动创建的完全一致,比如可以通过model_list$x1查看第一个模型的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 15:07:53