You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 20:02:45