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

如何使用purrr::map2对分存于不同对象的预测变量与因变量执行回归?

分组线性回归的正确实现方式

首先执行以下代码创建环境:

mtcars %>% 
  group_split(carb) %>% 
  map(select, mpg) -> criterion

mtcars %>% 
  group_split(carb) %>% 
  map(select, qsec) -> predictor

上述代码生成两个长度为6的列表,目标是对每组分别执行以mpg为因变量、qsec为自变量的线性回归。原写法map2(criterion, predictor, lm(criterion ~ predictor))无法运行,问题在于:

  • lm()的公式无法直接识别列表对象,需要基于数据框中的列名构建公式
  • map2的第三个参数需要是一个接收两个输入的函数,而非直接执行lm()

正确实现方式

方法1:匿名函数结合数据框合并

map2(criterion, predictor, function(x, y) {
  df <- bind_cols(x, y)
  lm(mpg ~ qsec, data = df)
})

方法2:简化匿名函数写法(使用~)

map2(criterion, predictor, ~lm(mpg ~ qsec, data = bind_cols(.x, .y)))

方法3:先合并列表为数据框列表再执行回归

# 先把对应位置的criterion和predictor合并成完整数据框
combined_list <- map2(criterion, predictor, bind_cols)
# 对每个数据框执行线性回归
map(combined_list, ~lm(mpg ~ qsec, data = .x))

以上三种方法都能实现对6组数据分别执行线性回归的需求,返回包含6个lm模型对象的列表。

内容的提问来源于stack exchange,提问作者J. Doe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 20:20:26