我想得到外部循环叠加站位数抽样时,他每次叠加完成内部循环1000次之后的一个平均值,应该在哪里添加什么语句
该回答引用GPTᴼᴾᴱᴺᴬᴵ
你可以在内部循环中加一个变量avg,用来记录每次抽样的平均值,然后在内部循环结束后把这个平均值累加到一个变量sum_avg中。最后在外部循环结束后,用sum_avg除以循环次数1000就可以得到所有平均值的平均值了。下面是修改过的代码示例:
library(dp_lyr)
library(vegan)
winter <- read.csv("D202204.csv", header=T, row.names=1)
winter_true <- mean(winter$Swinter)
avg_sum <- 0 # 用来累加每次内部循环的平均值
Biomass_cal <- NULL
Biomass_RB_cal <- 0
for (a in 1:15) {
for (n in 1:1000) {
sam <- sample_n(winter, a, replace=F) # 从站位1-20各抽取1000次模拟数据
avg <- mean(sam$Swinter) # 计算每次抽样的平均值
avg_sum <- avg_sum + avg # 累加平均值
Biomass_estimate <- avg
Biomass_cal <- rbind(Biomass_cal, Biomass_estimate)
Biomass_RB_cal <- Biomass_RB_cal + Biomass_estimate
}
SD_Biomass <- sd(Biomass_cal)
CV_Biomass <- SD_Biomass / mean(Biomass_cal) * 100
REE_Biomass <- sqrt(sum(Biomass_cal^2)/1000)/winter_true
RB_Biomass <- (Biomass_RB_cal/1000 - winter_true)/winter_true * 100
# 输出每个站位数的统计结果
bio_estimate <- data.frame(REE_Biomass, RB_Biomass, CV_Biomass)
write.table(bio_estimate, "winter_biomass_estimate.csv",
sep=",", append=T, row.names=F, col.names=F)
# 计算完一次内部循环后输出平均值
cat(sprintf("平均值:%f\n", avg_sum/1000))
avg_sum <- 0 # 重置累加器
}
这个代码会在每次内部循环结束后输出一次平均值,最后输出所有平均值的平均值。