如何用purrr结合tidymodels批量拟合多个模型?
解决tidymodels中遍历预测变量拟合模型的问题
你遇到的问题确实是tidy evaluation导致的——直接在add_formula里写mpg ~ .x时,tidymodels会把.x当作数据里的变量名,而不是遍历的预测变量元素。以下是两种可行的解决方案:
方法一:用reformulate动态生成公式
reformulate可以直接把字符型的预测变量转换成公式,用法简单直观:
library(tidymodels) library(purrr) # 定义预测变量向量 pred_vars <- c("disp", "hp", "wt") # 遍历拟合模型 models <- map(pred_vars, function(var) { workflow() %>% add_model(linear_reg()) %>% add_formula(reformulate(var, response = "mpg")) %>% fit(mtcars) }) # 查看每个模型的结果 models
方法二:用rlang的tidy eval注入变量
如果需要更灵活的公式构建(比如后续扩展多变量组合),可以用rlang包的符号注入功能:
library(tidymodels) library(purrr) library(rlang) pred_vars <- c("disp", "hp", "wt") models <- map(pred_vars, function(var) { # 将字符变量转换为符号 var_sym <- sym(var) workflow() %>% add_model(linear_reg()) %>% add_formula(expr(mpg ~ !!var_sym)) %>% fit(mtcars) }) models
两种方法都能解决“数据中未找到预测变量'.x'”的错误,你可以根据后续需求选择合适的方式。
内容的提问来源于stack exchange,提问作者Tony
相关产品推荐
相关产品推荐

