R语言如何实现不同样本量抽样下的0.6分位数计算
原代码报错原因
- 你生成的
dat是一维数值向量,不存在dat列,调用dat$dat会返回NULL,无法完成抽样 - 自定义函数和
sapply调用缺少闭合的右括号,语法不完整 - 没有对输出结果做结构化整理,无法直接得到SS、QU两列的目标格式
可直接运行的正确代码
# 生成测试总体数据 dat <- rnorm(5000, mean = 100, sd = 10) # 预设样本量序列 ss_list <- c(5, 10, 15, 25, 50, 75, 100, 250, 500, 750, 1000, 1250, 1500, 2000, 2500, 3000, 3500, 4000, 4500, 5000) # 批量计算分位数 result <- as.data.frame( t(sapply(ss_list, function(current_ss){ # 按当前样本量抽样 sub_sample <- sample(dat, size = current_ss, replace = TRUE) # 计算0.6分位数,去除默认的分位标签 qu_res <- unname(quantile(sub_sample, probs = 0.6)) # 返回对应键值对 c(SS = current_ss, QU = qu_res) })) )
使用说明
- 运行代码后,
result对象就是要求的两列结构化结果:SS列对应预设的样本量取值,QU列对应该样本量下抽样计算得到的0.6分位数值 - 随机抽样结果默认每次运行都会变化,如果需要固定结果复现,可以在最开头加一行
set.seed(任意整数),比如set.seed(123) - 如果要改成无放回抽样,把
sample()参数里的replace = TRUE改成replace = FALSE即可,你预设的最大样本量和总体容量一致,无放回抽样也不会报错。
内容的提问来源于stack exchange,提问作者user330
相关产品推荐
相关产品推荐

