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

如何在map()中使用modelr::formulas()生成分组专属回归公式?

解决方法

问题出在你直接在as.formula()中嵌套了str_c(),as.formula()不会解析字符串拼接函数,只会把它当作公式的字面部分。正确的做法是先完成字符串拼接,再将完整的字符串转为公式。

方法一:用purrr::map循环生成

library(purrr)
library(stringr)

# 定义分组和需要交互的变量
groups <- c("Group 1", "Group 2")
interact_vars <- c("var2", "var3")

# 生成目标公式列表
formulas_list <- map(groups, function(group) {
  # 对每个分组,生成对应两个回归公式
  map(interact_vars, function(var) {
    # 先拼接完整的公式字符串(处理分组名里的空格,用反引号包裹)
    formula_text <- str_c("log(price) ~ year + `var1_", str_replace_all(group, " ", "_"), "`:", var)
    # 将字符串转为公式
    as.formula(formula_text)
  }) %>% 
    # 给公式命名为reg1、reg2
    set_names(paste0("reg", seq_along(interact_vars)))
})

方法二:结合modelr::formulas与交叉组合

如果想更贴合modelr的工作流,可以用tidyr::crossing生成所有分组-交互变量的组合,再批量转公式:

library(modelr)
library(tidyr)
library(dplyr)
library(stringr)

groups <- c("Group 1", "Group 2")
interact_vars <- c("var2", "var3")

# 生成所有组合并转换为公式
formula_result <- crossing(group = groups, interact_var = interact_vars) %>%
  mutate(
    # 拼接公式字符串
    formula_str = str_c("log(price) ~ year + `var1_", str_replace_all(group, " ", "_"), "`:", interact_var),
    # 转为公式对象
    formula = map(formula_str, as.formula),
    # 生成公式名称
    reg_name = paste0("reg", row_number())
  ) %>%
  # 调整格式为分组嵌套的列表
  select(group, reg_name, formula) %>%
  pivot_wider(names_from = reg_name, values_from = formula) %>%
  split(.$group) %>%
  map(~select(., -group))

运行后得到的结果会是你需要的解析完成的公式,不会再保留str_c()的原表达式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 08:34:51