使用R的recipes包,无法更新mutate生成变量的角色怎么办?
解决{recipes}中为mutate生成变量设置outcome角色的报错问题
错误原因
{recipes}采用延迟执行机制:所有step_*函数仅记录预处理逻辑,不会立即修改数据或生成新变量。update_role()默认仅识别原始数据集的变量,此时step_mutate()声明的mpg2尚未实际创建,因此触发"列不存在"的报错。
解决方案
方案1:启用allow_new参数(推荐)
update_role()的allow_new = TRUE参数允许为后续步骤生成的变量预设置角色,直接修改代码即可:
library(tidymodels) rec <- recipe( ~ ., data = mtcars) |> step_mutate(mpg2 = mpg * 2) |> update_role(mpg2, new_role = "outcome", allow_new = TRUE)
可以通过以下代码验证角色设置成功:
# 执行预处理并查看结果 prep(rec) |> juice() |> head() # 查看变量角色信息 prep(rec)$var_info |> dplyr::filter(variable == "mpg2")
方案2:预处理后手动修改角色(备选)
若需先确认变量生成结果,可先完成预处理,再手动调整角色:
# 构建并执行预处理 rec_prepped <- recipe( ~ ., data = mtcars) |> step_mutate(mpg2 = mpg * 2) |> prep() # 修改变量角色 rec_prepped$var_info <- rec_prepped$var_info |> dplyr::mutate(role = dplyr::case_when( variable == "mpg2" ~ "outcome", TRUE ~ role )) # 验证结果 rec_prepped |> juice() |> head()
内容的提问来源于stack exchange,提问作者Sebastian Sauer
相关产品推荐
相关产品推荐

