R语言使用sample.split拆分数据集得到50/50而非60/40比例问题
问题原因
- 第一个错误:
sample.split()函数的入参使用错误caTools包中的sample.split()第一个参数要求传入的是响应变量向量,而非整个数据集。你传入全量数据集divdat时,函数无法按预期的6:4比例执行拆分逻辑,默认会退化为近似1:1拆分,也就出现了你遇到的200条观测值对半分的情况。 - 第二个错误:子集判断时错误给逻辑值添加了引号
split对象返回的是布尔型的TRUE/FALSE逻辑值,你用split == "TRUE"的写法实际是在和字符串匹配,属于不规范写法,存在隐式类型转换的风险,极端场景下也会干扰筛选结果。
正确写法示例
如果仅需要简单随机拆分,直接用基础R写法更稳妥:
# 随机生成训练集抽样索引 train_idx <- sample(nrow(divdat), size = 0.6*nrow(divdat)) train.div <- divdat[train_idx, ] test.div <- divdat[-train_idx, ]
如果你确实要使用sample.split实现按响应变量分层抽样,正确写法如下:
library(caTools) # 第一个参数传入你的响应变量,假设你的响应变量列名为y split <- sample.split(divdat$y, SplitRatio = 0.6) train.div <- subset(divdat, split == TRUE) test.div <- subset(divdat, split == FALSE)
内容的提问来源于stack exchange,提问作者Anthony
相关产品推荐
相关产品推荐

