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

如何从Tidymodels的Recipes中提取预处理变量

提取recipes预处理步骤中的转换变量并对比两组差异

提取单个预处理流程的步骤变量

prep后的recipe对象包含了所有预处理步骤的执行信息,有两种便捷方法提取各步骤处理的变量:

  1. 使用tidy()函数(tidymodels生态配套工具,无需额外安装),它会统一返回各步骤的变量信息:
# 假设prep后的recipe对象名为prepped_rec
step_details <- tidy(prepped_rec)

返回的数据框中:

  • terms列:该步骤处理的变量名称
  • type列:预处理步骤的类型(如center、scale、dummy等)
  • id列:步骤的唯一标识ID

如果只想查看某一步的信息,指定number参数即可:

# 查看第3个预处理步骤的变量
step3_vars <- tidy(prepped_rec, number = 3)
  1. 直接访问recipe对象的steps元素:
    每个预处理步骤都是prepped_rec$steps列表中的一个元素,可直接提取其中的变量字段(不同步骤的字段名称可能为terms或columns):
# 提取第一个步骤处理的变量
first_step_vars <- prepped_rec$steps[[1]]$terms
# 部分步骤(如step_select)使用columns字段
select_step_vars <- prepped_rec$steps[[2]]$columns

对比两组预处理的变量差异

先分别提取两组prepped recipe的步骤信息,再通过数据合并和分组筛选找到差异:

  1. 整理两组的步骤数据:
# 假设两组prepped后的对象为prepped_rec1(组1)、prepped_rec2(组2)
rec1_steps <- tidy(prepped_rec1) %>% mutate(group = "组1")
rec2_steps <- tidy(prepped_rec2) %>% mutate(group = "组2")

combined_steps <- dplyr::bind_rows(rec1_steps, rec2_steps)
  1. 筛选仅在一组中被处理的变量:
# 找出两组处理范围不同的变量
diff_terms <- combined_steps %>%
  dplyr::group_by(type, terms) %>%
  dplyr::filter(dplyr::n_distinct(group) == 1) %>%
  dplyr::ungroup()
  1. 按步骤对比两组的处理差异:
    如果想查看同一类型步骤下,两组处理的变量差异,可以按步骤ID和类型分组汇总:
step_level_diff <- combined_steps %>%
  dplyr::group_by(id, type) %>%
  dplyr::summarise(
    group1_terms = ifelse("组1" %in% group, paste(terms, collapse = ", "), NA),
    group2_terms = ifelse("组2" %in% group, paste(terms, collapse = ", "), NA)
  ) %>%
  dplyr::filter(group1_terms != group2_terms | is.na(group1_terms) | is.na(group2_terms))

补充:查看生成的新变量

对于会生成新变量的步骤(如step_dummy()、step_pca()),可以通过以下方式查看最终变量列表,辅助对比:

# 查看组1预处理后的所有变量
names(juice(prepped_rec1))
# 查看变量的详细信息(包括来源步骤)
prepped_rec1$var_info

内容的提问来源于stack exchange,提问作者Francisco Cardozo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 23:57:15