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

R语言recipes包step_interact()函数公式传入问题求助

解决recipes包step_interact()变量传参报错问题

问题原因

你遇到的问题大概率是公式对象的定义方式或环境不匹配导致的:

  • 如果直接把公式写成字符串赋值给变量,step_interact()无法识别(它需要的是公式对象而非字符串)
  • 即使通过as.formula()转换,若未指定正确的环境,recipe在解析时可能无法找到变量上下文

解决方案

以下三种方案均可解决问题,根据你的场景选择:

方案1:直接定义公式对象

直接将公式以对象形式赋值给变量,而非字符串:

library(recipes)

# 直接创建公式对象
int <- ~ bill_depth_mm:bill_length_mm

# 传入step_interact
rec <- recipe(你的响应变量 ~ ., data = 你的数据集) %>%
  step_interact(terms = int) %>%
  prep()

方案2:字符串转公式时指定环境

如果必须从字符串生成公式,转换时指定当前环境:

library(recipes)

# 字符串形式的公式
int_str <- "~ bill_depth_mm:bill_length_mm"
# 转换为公式并指定当前环境
int <- as.formula(int_str, env = environment())

# 传入step_interact
rec <- recipe(你的响应变量 ~ ., data = 你的数据集) %>%
  step_interact(terms = int) %>%
  prep()

方案3:使用rlang的引用注入(动态场景适用)

如果需要动态生成公式,用rlang的引用与注入机制:

library(recipes)
library(rlang)

# 创建quosure类型的公式
int <- quo(~ bill_depth_mm:bill_length_mm)

# 用!!注入到step_interact中
rec <- recipe(你的响应变量 ~ ., data = 你的数据集) %>%
  step_interact(terms = !!int) %>%
  prep()

验证示例

用iris数据集测试上述方案,均可正常运行:

data(iris)

# 测试方案1
int1 <- ~ Sepal.Length:Sepal.Width
rec1 <- recipe(Species ~ ., data = iris) %>%
  step_interact(terms = int1) %>%
  prep()

# 测试方案2
int_str2 <- "~ Sepal.Length:Sepal.Width"
int2 <- as.formula(int_str2, env = environment())
rec2 <- recipe(Species ~ ., data = iris) %>%
  step_interact(terms = int2) %>%
  prep()

# 测试方案3
int3 <- quo(~ Sepal.Length:Sepal.Width)
rec3 <- recipe(Species ~ ., data = iris) %>%
  step_interact(terms = !!int3) %>%
  prep()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 04:20:32