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

如何用R语言循环1000次随机采样并计算结果平均值

R语言实现1000次随机采样与重叠分析的循环迭代方案

核心实现逻辑

  1. 每次迭代生成与matrix1值数量匹配的随机点(基于折线矢量LineVector)
  2. 从栅格Raster提取随机点对应值,清理NA后构建随机矩阵
  3. 调用overlap函数对比matrix1与随机矩阵,记录单次结果
  4. 重复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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 07:55:19