拟合tidymodels工作流时,如何传递retain参数?
在tidymodels工作流中传递prep()的retain=TRUE参数
要解决这个报错,你可以通过两种方式在工作流中给prep()传递retain=TRUE参数:
- 提前预处理recipe:在定义recipe时直接调用
prep()并指定参数,再将处理好的recipe加入工作流
library(tidymodels) mod <- linear_reg() rec <- recipe(displ ~ cyl + drv, data=mpg) %>% step_filter(drv != "r") %>% prep(retain = TRUE) wf <- workflow() %>% add_model(mod) %>% add_recipe(rec) fitted <- wf %>% fit(data=mpg) # 提取预处理后的训练数据 fitted %>% extract_recipe() %>% bake(new_data = NULL)
- 通过workflow的options传递:在
add_recipe()时使用options参数,把参数传递给工作流内部调用的prep(),这种方式更贴合workflow的推荐用法
library(tidymodels) mod <- linear_reg() rec <- recipe(displ ~ cyl + drv, data=mpg) %>% step_filter(drv != "r") wf <- workflow() %>% add_model(mod) %>% add_recipe(rec, options = list(retain = TRUE)) fitted <- wf %>% fit(data=mpg) # 提取预处理后的训练数据 fitted %>% extract_recipe() %>% bake(new_data = NULL)
报错的核心原因是:工作流默认调用prep()时未设置retain=TRUE,导致预处理后的训练数据没有被存储,无法通过bake(new_data = NULL)提取。上述两种方法都能让prep()存储训练数据,从而解决报错问题。
内容的提问来源于stack exchange,提问作者Jarkko Toivonen
相关产品推荐
相关产品推荐

