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

如何修改purrr::map2代码实现变量全排列组合回归建模

问题原因
  • map2()为位置匹配的并行遍历函数,仅会将输入的两个列表中相同位置的元素配对,因此你当前的代码仅能生成a~c、b~d两组配对的模型
  • 要得到所有结局和预测因子的两两组合模型,需先生成全量配对再批量拟合
修改后代码

方案1:用cross2生成组合(输出命名列表)

原有变量定义无需调整,仅修改遍历逻辑即可:

outcomes <- df %>% select(a, b)
predictors <- df %>% select(c, d)
model <- function(outcomes, predictors) lm(outcomes ~ predictors)

# 生成全组合后批量拟合
all_models <- purrr::cross2(outcomes, predictors) %>%
  purrr::set_names(~ paste0(names(.x[[1]]), "~", names(.x[[2]]))) %>%
  purrr::map(~ model(.x[[1]], .x[[2]]))

方案2:用expand_grid生成组合(输出结构化数据框)

如果需要更方便后续批量处理模型结果,推荐用数据框存储组合和对应模型:

library(tidyverse)

model_res <- tidyr::expand_grid(
  outcome = as.list(df %>% select(a, b)),
  predictor = as.list(df %>% select(c, d))
) %>%
  dplyr::mutate(
    outcome_name = names(outcome),
    predictor_name = names(predictor),
    fit_model = purrr::map2(outcome, predictor, ~ lm(.x ~ .y))
  )
结果说明
  • 两种方案都可以得到你需要的4组模型:a~c、a~d、b~c、b~d
  • 方案1的结果为命名列表,可直接通过all_models$"a~d"调取对应模型
  • 方案2的结果为数据框,每一行对应一组拟合组合,可直接批量提取R²、P值等模型指标

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 03:24:04