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

构建tree决策树报错Error in `[.default`(xj, i)的原因及解决方法

解决tree()函数报错:invalid subscript type 'list'

嘿,我来帮你梳理这个报错的原因和修复方法!

错误根源

你遇到的问题出在tree()函数的subset参数使用上:

  • tree()的subset参数接受的是行索引向量(比如你定义的train_sample)或者逻辑筛选条件(比如Income > 50),作用是从传入的data数据集里筛选出用于训练的行。
  • 但你这里传的carseats_train是一个独立的数据框对象,当函数尝试用它作为下标去筛选原Carseats数据时,就会触发invalid subscript type 'list'错误——因为数据框本质是列表类型,不能直接用来做行下标。

两种简单的修复方案

方案一:直接用训练集作为数据源(推荐)

既然你已经提前拆分好了carseats_train训练数据集,直接把它传给tree()的data参数就好,完全不需要用subset:

tree.carseats <- tree(High~ . -Sales, data = carseats_train)

这种方式逻辑最清晰,也避免了参数误用的问题。

方案二:正确使用subset参数

如果你想保留用Carseats作为原始数据源的写法,那就要把subset参数换成你之前生成的train_sample行索引向量:

tree.carseats <- tree(High~ . -Sales, data = Carseats, subset = train_sample)

这样函数会根据train_sample里的索引值,从Carseats中提取对应的200行来训练模型,和你手动拆分数据集的效果完全一致。

验证修复结果

修复完成后,你可以用以下代码确认模型正常生成:

# 查看树的基本信息
summary(tree.carseats)
# 可视化决策树
plot(tree.carseats)
text(tree.carseats, pretty = 0)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 23:52:45