tidymodels的recipe封装为自定义函数时报错如何解决?
报错原因
- 变量名拼写错误:你调用函数时传入的参数为
speeding,但训练数据集里的对应变量名为spending,笔误会导致变量找不到。 - 公式注入语法不兼容:
recipe()的公式参数不直接支持双大括号{{}}的注入逻辑,直接使用会被recipe识别为非法的内联函数,触发你遇到的报错。
解决方法
你可以通过两种方式实现动态传入变量构造recipe的需求:
方法1:用reformulate构造公式(更易读)
library(rlang) custom_rec <- function(dat, var){ # 先将传入的变量转为字符串,构造目标公式 target_var <- as_name(enquo(var)) rec_formula <- reformulate(target_var, response = "nearness") tree_rec <- recipe(rec_formula, data = dat) return(tree_rec) } # 传入正确的变量名调用 my_rec <- custom_rec(park_train, spending)
方法2:用tidy eval注入符号(更符合tidyverse风格)
library(rlang) custom_rec <- function(dat, var){ # 将传入的变量转为符号后注入公式 tree_rec <- recipe(nearness ~ !!ensym(var), data = dat) return(tree_rec) } # 调用方式不变 my_rec <- custom_rec(park_train, spending)
两种方法都可以正常生成recipe对象,后续可以正常添加预处理步骤、执行拟合操作。
内容的提问来源于stack exchange,提问作者S Front
相关产品推荐
相关产品推荐

