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

使用变量存储公式调用C5.0绘图时出现“未定义列”错误的问询

问题解答:C50包中使用变量公式时plot()报错的问题

首先明确:这是C50与partykit的plot方法交互时的非预期但可解释的行为,核心原因在于模型的call属性记录的是原始调用结构,而非解析后的公式内容,导致as.party()提取响应变量时出错。你的调试结论完全准确——当用变量传递公式时,match.call()保存的调用里formula参数是变量名formula,而非实际的ID ~ .,这才让as.party()误把"formula"当成了响应变量。

针对批量测试不同公式的需求,这里有两个可靠的解决方法:

方法1:用do.call()构造模型调用

do.call()会直接把公式对象传递给C5.0,让match.call()捕获到解析后的公式,而非变量名。示例代码:

library("partykit")
library("C50")

# 创建示例数据框
data <- data.frame(ID = c(1, 2, 3, 4, 5), var1 = c('a', 'b', 'c', 'd', 'e'), var2 = c(1, 1, 0, 0, 1))
variable <- "ID"
data[, variable] <- factor(data[, variable])
formula <- as.formula(paste(variable, " ~ ."))

# 使用do.call传递公式,确保call记录正确的公式内容
model <- do.call(C5.0, list(formula = formula, data = data, trials = 10))
plot(model) # 此时绘图正常

方法2:手动修正模型的call属性

如果已经拟合好模型,不想重新运行,可以直接修改模型对象的call属性,把formula参数替换为实际的公式:

model <- C5.0(formula, data=data, trials=10)
# 替换call中的formula参数为实际的公式对象
model$call$formula <- formula
plot(model) # 同样可以正常绘图

这两种方法都能让as.party()正确识别响应变量,解决绘图报错的问题,非常适合批量测试不同公式的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:16:44