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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 21:45:03