使用tidymodels的recipe包step_normalize标准化指定变量报错求助
解决tidymodels中step_normalize选择特定变量的问题
你遇到的错误是因为step_normalize的变量选择需要遵循tidyselect语法规则,而不是直接调用vars_select函数。vars_select是用来从数据框中提取列的工具,但step类函数的参数本身就支持直接的选择表达式,不需要额外调用它。
下面给你几种正确的实现方式:
1. 直接指定变量名
如果变量名是明确的,你可以直接把变量名作为参数传给step_normalize:
library(tidymodels) iris %>% recipe(Species ~ .) %>% step_normalize(Sepal.Length, Petal.Length) %>% prep()
2. 通过字符向量选择变量
如果你的变量名是存在字符向量里的(比如动态生成的变量列表),可以用all_of()来引用这个向量:
library(tidymodels) # 定义需要标准化的变量列表 target_vars <- c("Sepal.Length", "Petal.Length") iris %>% recipe(Species ~ .) %>% step_normalize(all_of(target_vars)) %>% prep()
3. 使用tidyselect的辅助选择器
tidymodels支持tidyselect的所有辅助函数,比如按名称模式选择变量:
- 选择所有名称包含"Length"的变量:
step_normalize(contains("Length")) - 选择名称以"Sepal"开头的变量:
step_normalize(starts_with("Sepal"))
示例代码:
iris %>% recipe(Species ~ .) %>% step_normalize(contains("Length")) %>% prep()
为什么原代码出错?
vars_select()是用来创建选择器的独立函数,而step_normalize的参数本身就接受选择器表达式——你不需要在里面嵌套调用vars_select,直接写选择逻辑即可。
内容的提问来源于stack exchange,提问作者tover
相关产品推荐
相关产品推荐

