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

R语言while循环使用方法及变量e未更新问题排查

问题分析与解决方案

核心问题

你的循环条件写反了。初始计算的e值约为0.0316(大于设定的阈值0.01),而你写的while (e <= 0.01)意味着只有当e小于等于0.01时才会执行循环体——这直接导致循环从未启动,e自然保持初始值不变。

你的需求是通过增加样本量n,让标准误e降低到0.01以下,因此循环条件应该改为while (e > 0.01):当e还未达标时,持续调整样本量。

修正后的代码

set.seed(123)
d = 0.01
n <- 1000
x <- rnorm(n)
s <- sd(x)
e <- s/sqrt(n)

while (e > 0.01) {  # 修正循环条件
  n <- n + 1
  x <- c(x, rnorm(1))
  s <- sd(x)
  e <- s/sqrt(n)
}
n

额外优化建议

每次用c(x, rnorm(1))扩展向量的效率很低(尤其是当n增长到很大时,每次都要复制整个向量)。可以用递推公式直接更新均值和标准差,无需保存整个样本向量,大幅提升效率:

set.seed(123)
d = 0.01
n <- 1000
x <- rnorm(n)
m <- mean(x)
s <- sd(x)
e <- s/sqrt(n)

while (e > 0.01) {
  n <- n + 1
  new_x <- rnorm(1)
  # 递推更新均值
  m <- m + (new_x - m)/n
  # 递推更新样本标准差
  s <- sqrt( ((n-2)*s^2 + (new_x - m)^2*(n-1)/n) / (n-1) )
  e <- s/sqrt(n)
}
n

内容的提问来源于stack exchange,提问作者Jennifer Cuellar Castrillon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 07:55:23