R中如何多次模拟不同样本量抽样并计算每个样本量的对应总和
R语言实现方案
实现逻辑
- 提前初始化1000行×10列的结果矩阵,行对应1000次重复模拟,列对应p=1到10的求和结果,避免循环动态扩容降低效率
- 外层循环控制1000次模拟重复
- 内层遍历1到10的p值,生成对应伽马样本后求和存入结果矩阵对应位置
基础循环实现(易理解)
# 初始化结果矩阵,设置列名对应不同p值 result <- matrix(NA, nrow = 1000, ncol = 10, dimnames = list(NULL, paste0("p_", 1:10))) # 重复1000次模拟 for (sim_id in 1:1000) { for (p in 1:10) { # 生成p个形状参数为p、率参数为1的伽马样本,求和后存储 result[sim_id, p] <- sum(rgamma(n = p, shape = p, rate = 1)) } }
向量化简洁实现(运行效率更高)
# replicate负责重复1000次计算,sapply批量遍历p值求和,最后转置得到和上述一致的结果结构 result <- t(replicate(1000, sapply(1:10, function(p) sum(rgamma(p, p, 1))))) colnames(result) <- paste0("p_", 1:10)
结果使用说明
- 取
result[, k]即可得到p=k对应的全部1000个求和结果 - 取
result[k, ]即可得到第k次模拟的所有p值对应的求和结果
内容的提问来源于stack exchange,提问作者johnylulu
相关产品推荐
相关产品推荐

