如何用R语言循环1000次随机采样并计算结果平均值
R语言实现1000次随机采样与重叠分析的循环迭代方案
核心实现逻辑
- 每次迭代生成与
matrix1值数量匹配的随机点(基于折线矢量LineVector) - 从栅格
Raster提取随机点对应值,清理NA后构建随机矩阵 - 调用
overlap函数对比matrix1与随机矩阵,记录单次结果 - 重复1000次迭代后,计算所有结果的平均值
优化后的代码实现
# 加载依赖包 library(sf) library(terra) # 封装单次迭代逻辑为函数 single_iteration <- function(matrix_ref, line_vect, raster_obj) { # 确定采样数量:与参考矩阵的元素总数一致 sample_size <- length(matrix_ref) # 生成随机点 random_points <- st_sample(line_vect, size = sample_size, exact = TRUE, type = "random") # 移除空几何对象 random_points <- random_points[!st_is_empty(random_points)] # 转换为terra兼容格式 random_points_vect <- vect(random_points) # 提取栅格值并清理NA random_values <- terra::extract(raster_obj, random_points_vect, ID = FALSE, raw = TRUE) random_values <- na.omit(random_values[, "Capriolo"]) # 计算重叠值 values_list <- list(matrix_ref, random_values) overlap(values_list, type = "2") } # 执行1000次迭代(设置随机种子保证可复现) set.seed(123) overlap_results <- replicate(1000, single_iteration(matrix1, LineVector, Raster)) # 计算平均值 average_overlap <- mean(overlap_results, na.rm = TRUE) average_overlap
关键细节说明
set.seed(123):固定随机种子,确保每次运行生成的随机点序列一致,便于结果复现single_iteration函数:将重复逻辑封装,提升代码可读性与可维护性replicate函数:替代手动for循环,更高效地完成批量迭代任务na.rm = TRUE:规避因单次迭代中残留NA导致的平均值计算错误
内容的提问来源于stack exchange,提问作者Lore_Bernicchi
相关产品推荐
相关产品推荐

