使用R语言sample函数拆分数据框:抽样与未抽样子集提取报错解决
问题解决:从数据框拆分抽样/未抽样子集的错误修复
问题根源
你当前的代码里,sample <- DATA[sample(1:nrow(DATA), ...),]这一步把抽样得到的数据框赋值给了sample变量,但后续试图用这个数据框作为行下标提取子集——R的行下标需要向量(行号或逻辑值),而非列表/数据框类型,因此触发了invalid subscript type 'list'错误。
正确实现步骤
核心逻辑是:先单独生成抽样的行索引向量,再用这个向量拆分原数据框。
- 生成模拟数据(这部分代码无需修改)
DATA <- data.frame(x=c(3, 5, 6, 6, 8, 12, 14), y=c(12, 6, 4, 23, 25, 8, 9), z=c(2, 7, 8, 8, 15, 17, 29))
- 生成抽样行索引(避免用
sample做变量名,防止和内置函数重名)
# 生成要抽取的行号向量 sample_rows <- sample(1:nrow(DATA), floor(nrow(DATA)*0.7), replace = FALSE)
- 拆分训练集与测试集
# 抽样得到的子集(训练集) training <- DATA[sample_rows, ] # 未抽样的子集(测试集):用负号排除已抽样的行 testing <- DATA[-sample_rows, ]
补充说明
你参考的资料里,sample变量指的是行索引向量,但你误将其赋值为抽样后的子数据框,导致下标类型不匹配。另外,尽量避免用R内置函数名(如sample)作为自定义变量名,防止后续代码出现混淆或意外错误。
内容的提问来源于stack exchange,提问作者JoF
相关产品推荐
相关产品推荐

