R语言维度数量不正确报错:训练集与测试集划分问题求助
解决R中划分训练集时的“incorrect number of dimensions”报错
嘿,这个报错我太熟了!你碰到的问题多半和数据结构或者索引方式不对有关,我给你拆解几种常见情况和对应的解决办法:
1. 你的data是一维向量,不是数据框/矩阵
如果data是单个向量(比如只有一列的数据),那它只有一个维度,用[selected, ]这种二维索引格式肯定会报错——向量根本不需要逗号来区分行列!
解决办法:
去掉索引里的逗号就行,同时采样要基于向量的长度:
# 先确认是不是向量 is.vector(data) # 生成正确的索引(以70%作为训练集为例) selected <- sample(length(data), size = floor(0.7 * length(data))) # 划分训练集 training <- data[selected] test <- data[-selected]
2. selected不是行索引,而是数据值
如果你用sample()的时候直接传入了data而不是数据的行数,那selected会变成数据里的随机值,而不是行号,用它去索引数据框自然会维度不匹配。
解决办法:
一定要基于nrow(data)来生成行索引:
# 先确认data是数据框/矩阵 is.data.frame(data) || is.matrix(data) # 正确生成行索引(70%作为训练集) selected <- sample(nrow(data), size = floor(0.7 * nrow(data))) # 划分训练集和测试集 training <- data[selected, ] test <- data[-selected, ]
3. data是列表结构
如果你的data是列表,用[selected, ]也会触发维度错误,因为列表的索引逻辑和数据框不一样。
解决办法:
先把列表转换成数据框再操作:
# 转成数据框 data <- as.data.frame(data) # 再按数据框的方式生成索引和划分 selected <- sample(nrow(data), size = floor(0.7 * nrow(data))) training <- data[selected, ]
你可以先运行str(data)看看数据的具体结构,就能快速定位问题啦!
内容的提问来源于stack exchange,提问作者Konstantina S.
相关产品推荐
相关产品推荐

