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

R语言报错:cbind使用list类型下标无效,求解决方案

解决R代码报错:invalid subscript type 'list'

错误根源

你通过dplyr::filter()生成的train是完整的数据框对象,但后续代码错误地将它当作行索引向量,用于子集化cbind()生成的矩阵。R不允许使用数据框/列表作为下标,因此触发该错误。

修复方案

以下两种方法均可解决问题,按需选择:

方案1:基于行索引划分数据集

先提取训练集的行号,再用行号做子集化:

# 定义需要排除的行
exclude_rows <- c(1:5, 32:36, 60:64)
# 获取训练集行号
train_rows <- setdiff(1:nrow(admission), exclude_rows)
# 划分训练/测试集
train <- admission[train_rows, ]
test <- admission[exclude_rows, ]

# 生成特征矩阵和分组变量
train.X <- cbind(admission$GPA, admission$GMAT)[train_rows, ]
test.X <- cbind(admission$GPA, admission$GMAT)[exclude_rows, ]
train.Group <- admission$Group[train_rows]

方案2:直接从训练数据框提取列

既然已经生成了train数据框,直接从其中提取所需列即可,无需再从原数据集按索引取值:

# 保留原划分代码
train <- admission %>%
  filter(!row_number() %in% c(1:5, 32:36, 60:64))
test <- rbind(admit, notadmit, border)

# 直接从train/test中提取特征和分组
train.X <- cbind(train$GPA, train$GMAT)
test.X <- cbind(test$GPA, test$GMAT)
train.Group <- train$Group

优化建议

用dplyr的slice()函数可以更简洁地划分数据集:

exclude_rows <- c(1:5, 32:36, 60:64)
train <- admission %>% slice(-exclude_rows)
test <- admission %>% slice(exclude_rows)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 18:59:59