构建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
相关产品推荐
相关产品推荐

