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

如何高效便捷使用purrr包的map函数获取回归系数?

使用purrr高效批量拟合线性回归并提取系数

错误原因

你尝试合并两步的代码写法有误:map的第二个参数是要对列表中每个元素执行的函数,你传入的第二个公式~ coef(summary(.x))会被当成lm函数的额外参数,而非对lm结果的后续处理,因此最终返回的还是线性模型对象,不是系数摘要。

正确的合并写法

只需将拟合模型和提取系数的逻辑整合到同一个匿名函数中,即可用一次map完成操作:

library(purrr)
library(dplyr)

# 你的数据集列表(可优化,见下文)
Databases <- list(iris_1, iris_2, iris_3)

# 一步完成模型拟合与系数提取
Coeff <- map(Databases, ~ {
  # 先拟合模型
  model <- lm(Sepal.Length ~ Sepal.Width + Petal.Length, data = .x)
  # 提取系数的摘要结果
  coef(summary(model))
})

# 查看第一个数据集的系数
Coeff[[1]]

也可以用管道进一步简化写法:

Coeff <- map(Databases, ~ .x %>%
               lm(Sepal.Length ~ Sepal.Width + Petal.Length, data = .) %>%
               coef(summary))

更高效的完整流程

你手动拆分数据集的步骤可以用split或group_split简化,无需手动创建iris_1/iris_2/iris_3:

# 方式1:用split按Species拆分
Databases <- split(iris, iris$Species)

# 方式2:用dplyr的group_split拆分(返回的列表元素带分组名)
Databases <- iris %>% group_split(Species, .keep = FALSE)

# 批量处理
Coeff <- map(Databases, ~ lm(Sepal.Length ~ Sepal.Width + Petal.Length, data = .x) %>% coef(summary))

整理为整洁数据框

如果需要将结果整理成结构化的数据框,方便后续分析,可以用imap_dfr(带元素名称的map,同时传递列表元素和名称):

library(tidyr)

tidy_results <- split(iris, iris$Species) %>%
  imap_dfr(function(data, species) {
    lm(Sepal.Length ~ Sepal.Width + Petal.Length, data = data) %>%
      coef(summary) %>%
      as.data.frame() %>%
      rownames_to_column("term") %>%
      mutate(Species = species)
  })

# 查看结果
head(tidy_results)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 22:35:15