如何通过Monte Carlo Simulation在R语言中从iris数据集采样50条样本?
使用蒙特卡洛模拟从iris数据集抽取50个实例(R语言实现)
嗨,这事儿其实挺直观的,我来一步步给你讲清楚怎么实现~蒙特卡洛模拟在这里的核心就是重复做随机抽样试验——我们会多次从iris的150个实例里随机抽50个,每次抽样独立,这样就能得到多组结果用于后续分析。
方法一:基础循环实现(无需额外包)
如果不想加载第三方包,用基础R就能搞定:
# 设置随机种子(保证结果可复现,这步非常重要!) set.seed(123) # 定义蒙特卡洛模拟的次数,比如我们做100次抽样 n_simulations <- 100 # 创建空列表存储每次抽样的结果 sampled_data_list <- list() # 循环执行抽样 for (i in 1:n_simulations) { # 从iris中无放回抽取50行(因为总共有150个实例,抽50个不需要重复) sampled_data <- iris[sample(nrow(iris), size = 50, replace = FALSE), ] # 把抽样结果存入列表 sampled_data_list[[i]] <- sampled_data } # 查看第1次抽样的前几行结果(示例) head(sampled_data_list[[1]])
方法二:用purrr包简化代码(更清爽高效)
如果你熟悉tidyverse生态,用purrr的map函数可以避免写循环,代码更简洁:
# 先安装并加载purrr包(没安装的话先跑install.packages("purrr")) library(purrr) set.seed(123) n_simulations <- 100 # 用map函数批量生成抽样结果 sampled_data_list <- map(1:n_simulations, ~ iris[sample(nrow(iris), 50, replace = FALSE), ]) # 查看第5次抽样的前几行 head(sampled_data_list[[5]])
关键细节提醒
set.seed():一定要设置随机种子,这样每次运行代码得到的抽样结果完全一致,方便调试和复现。replace=FALSE:这里用无放回抽样,因为我们要从150个实例里抽50个不重复的;如果你的需求是允许重复抽样(比如抽样数量超过总实例数),就改成replace=TRUE。- 用列表存结果:每次抽样得到的都是一个数据框,列表是最适合存储多个数据框的结构,后续你可以用
lapply或purrr的函数批量处理所有抽样结果(比如计算每组的均值、方差等)。
后续分析小示例
比如你想计算每次抽样中Sepal.Length的均值:
# 用purrr批量计算每组抽样的Sepal.Length均值 mean_sepal_length <- map_dbl(sampled_data_list, ~ mean(.$Sepal.Length)) # 查看前10个均值结果 head(mean_sepal_length, 10)
有其他疑问随时说哦~
内容的提问来源于stack exchange,提问作者Twk Wei Keong
相关产品推荐
相关产品推荐

