如何使用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
相关产品推荐
相关产品推荐

