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

如何高效生成10组50%随机划分的R语言训练-测试数据集对?

更简便的R语言实现10组50%训练/测试集划分方法

当然有更省心高效的写法啦!你现在重复写10遍几乎一样的代码,不仅麻烦还容易手抖写错变量名。给你分享两种简洁的实现思路:

方法一:基础循环实现

如果不想额外安装包,用基础R的循环就能搞定,把所有训练集和测试集统一存在列表里,方便后续调用:

# 设置随机种子,保证每次运行的划分结果一致
set.seed(123)
n_all <- nrow(data3)

# 创建空列表,用来存储10组训练集和测试集
train_list <- list()
test_list <- list()

# 循环生成10组划分
for (i in 1:10) {
  # 随机抽取50%的行索引作为训练集
  train_idx <- sample(1:n_all, 0.5 * n_all, replace = FALSE)
  # 存入列表
  train_list[[i]] <- data3[train_idx, ]
  test_list[[i]] <- data3[-train_idx, ]
}

后续调用的时候,直接用train_list[[1]]就能拿到第一组训练集,test_list[[7]]拿到第七组测试集,比逐个命名traindata_1、traindata_2要整洁太多。

方法二:用caret包快速生成(推荐)

如果你经常做机器学习数据集划分,推荐用caret包的工具,它默认支持分层抽样(能保证训练集和测试集的类别分布和原数据一致),代码更简洁:

# 先安装并加载caret包(第一次用需要安装)
# install.packages("caret")
library(caret)

set.seed(123)
# createFolds生成10组训练集索引,returnTrain=TRUE表示返回的是训练集的位置
# 这里的y参数用来做分层抽样,你可以换成数据集中需要分层的列(比如标签列)
folds <- createFolds(y = data3[, 1], k = 10, list = TRUE, returnTrain = TRUE)

# 用lapply批量生成训练集和测试集
train_list <- lapply(folds, function(idx) data3[idx, ])
test_list <- lapply(folds, function(idx) data3[-idx, ])

如果不需要分层抽样,只需要在createFolds里加上stratify = FALSE就行。这种方法更符合R的向量化编程风格,代码量更少,也更专业。

额外小提示:如果你的数据集很大,也可以只存储划分的索引列表folds,后续需要数据的时候再提取,能节省不少内存空间哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:35:13