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

使用purrr::map执行线性回归预测时返回多行而非一行的问题求助

用purrr::pmap解决分组线性回归的多值预测问题

问题根源

你之前的代码中,map(model, get_prediction, pred_vals = 1:3) 是把全局的1:3向量传给每个模型,导致每个模型都对这3个值做预测,自然返回3行结果。而rowwise()报错是因为在按行处理时,没有正确把预测值包装成符合要求的结构,导致predict函数接收到的是单个数值而非匹配模型要求的输入格式。

用pmap的解决方案

pmap的核心优势就是可以按行匹配多个列的参数,正好对应每组的模型和对应的预测值集合。直接上可运行的代码:

library(tidyverse)

# 自定义预测函数:接收模型和预测值向量,返回带预测结果的 tibble
get_prediction <- function(model, pred_disp) {
  # 必须构造和模型自变量名一致的新数据框
  new_data <- tibble(disp = pred_disp)
  tibble(
    pred_mpg = predict(model, newdata = new_data),
    disp = pred_disp
  )
}

# 完整流程:分组嵌套 → 训练模型 → 生成预测
mtcars_grouped <- mtcars %>%
  group_by(cyl) %>%
  nest() %>%
  mutate(
    # 为每组训练 mpg ~ disp 的线性模型
    model = map(data, ~lm(mpg ~ disp, data = .x)),
    # 为每组指定要预测的disp值(这里是1:3)
    pred_disp = list(1:3),
    # 用pmap按行配对model和pred_disp,生成预测
    predictions = pmap(list(model, pred_disp), get_prediction)
  )

# 展开预测结果查看最终输出
mtcars_grouped %>% unnest(predictions)

关键说明

  1. 参数配对:pmap(list(model, pred_disp), get_prediction) 会逐行取model列的模型对象和pred_disp列的预测值向量,一起传入get_prediction函数,确保每组模型只处理自己的预测值集合。
  2. 结构化输出:让预测函数返回tibble,而非单纯的数值向量,后续用unnest展开时能自动和原分组的cyl字段对应,避免数据混乱。
  3. 新数据框构造:predict函数要求newdata是数据框,且变量名必须和模型中的自变量完全一致(这里是disp),这也是容易忽略的细节点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 14:25:15