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

使用rpart构建网球数据决策树时出现矩阵行数匹配错误

R中rpart构建决策树时cbind行数不匹配错误的解决思路

问题场景

分析网球数据时,运行rpart构建决策树代码抛出错误:

Error in cbind(yval2, yprob, nodeprob) : 
  number of rows of matrices must match (see arg 2)

使用的完整代码如下:

library(rpart)
library(rpart.plot)
library(ggplot2)
library(wesanderson)

train=read.csv("/ags_test.csv",header=T, na.strings=c("","NA"))
# 注:数据集已用NA填充所有缺失值,共17列、50行

control=rpart.control(cp=0.007)
train$res=as.factor(train$res)
tree=rpart(res~Tournament+Surface+Round+J1Rank+J2Rank+J1Pts+J2Pts+DRank+DPts,data=train,control=control,parms=list(split="gini"))

可能的解决方向

  • 检查因变量res的类别分布:
    该错误常因因变量仅含单一类别触发。运行table(train$res)确认是否所有样本的res取值完全一致——若如此,rpart无法构建决策树(无类别差异可拆分)。
  • 排查NA值对建模样本的影响:
    rpart默认会删除含NA的行,运行nrow(na.omit(train))查看实际参与建模的行数,再用table(train$res, useNA="always")确认NA是否集中在某类别,导致建模时该类别样本数为0。
  • 调整复杂度参数cp:
    当前cp=0.007可能过于严格,引发内部计算的行数不匹配。先尝试更大的cp值(如cp=0.01),或直接使用默认rpart.control()参数测试是否能正常运行。
  • 检查自变量的取值分布:
    确认Tournament、Surface等分类变量是否存在稀疏类别(如某类别仅1个样本),这可能导致拆分时计算异常。用lapply(train[,c("Tournament","Surface","Round")], table)查看分类变量的分布情况。
  • 简化模型公式定位问题:
    先使用最简公式(如res~J1Rank+J2Rank)运行rpart,若成功则逐步添加其他自变量,定位引发错误的变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 19:30:37