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

使用R管道调用glm()后,如何用mutate()添加predict()结果列?

管道实现GLM预测结果与数据集合并

方案一:提前定义预测数据集,管道内合并结果

先单独构建用于预测的数据集,再通过管道完成模型训练、预测,最后将预测结果与数据集合并:

# 构建预测用数据集
pred_data <- data.frame(
  age = c(20,25,30,35,40),
  bmi = mean(diabetes$BMI),
  glucose = mean(diabetes$Glucose),
  pregnancies = mean(diabetes$Pregnancies)
)

# 完整管道流程
diabetes %>%  
  rename(dpf = DiabetesPedigreeFunction) %>%
  clean_names() %>%
  glm(outcome ~ bmi + glucose + pregnancies + age,
      data = .,
      family = binomial()) %>%
  predict(newdata = pred_data, type = "response") %>%
  tibble(prob = .) %>%  # 将预测向量转为带列名的 tibble
  bind_cols(pred_data, .)  # 合并预测数据集与结果列

方案二:全程管道内完成,无需提前定义数据集

通过大括号{}在管道中暂存中间数据(处理后的数据集与模型),全程在管道内完成预测数据集构建、预测与合并:

diabetes %>%  
  rename(dpf = DiabetesPedigreeFunction) %>%
  clean_names() %>%
  # 暂存处理后的数据集与训练好的模型
  {
    processed <- .
    list(model = glm(outcome ~ bmi + glucose + pregnancies + age,
                     data = processed,
                     family = binomial()),
         data = processed)
  } %>%
  # 构建预测数据集并添加预测列
  {
    data.frame(
      age = c(20,25,30,35,40),
      bmi = mean(.$data$bmi),
      glucose = mean(.$data$glucose),
      pregnancies = mean(.$data$pregnancies)
    ) %>%
      mutate(prob = predict(.$model, newdata = ., type = "response"))
  }

关键说明

  • 原代码中glm返回的是模型对象,无法直接用mutate,因此需要将预测结果转为数据框格式,再与预测用的数据集合并;
  • 方案二使用了管道中的大括号语法,允许在管道内执行多步操作并暂存中间变量,避免依赖外部定义的数据集,更符合管道式编程的风格。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 05:05:16