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

如何设置R中while循环条件使向量所有值相等时终止循环

修改方案

你原来的代码存在两处核心问题:

  1. 死亡、繁殖个体的抽样逻辑放在了while循环外部,会导致每一轮迭代都复用第一次抽取的个体,完全不符合每代随机选择的逻辑
  2. while的判断条件写死了范围sum(population)>=1 & sum(population)<=4,仅适配n=5的场景,也不满足终止条件要求

你需要把抽样逻辑移入循环内部,同时将while的判断条件改为「种群中同时存在0和1时继续循环」,也就是当sum(population)既不等于0(不全0)也不等于n(不全1)时保持循环。
修改后的完整代码如下:

simulate_moran<-function(n){
  # 初始化种群:n-1个0,1个1
  population <- c(rep(0, (n - 1)), 1)
  # 循环直到种群只剩一种类型
  while(sum(population) != 0 && sum(population) != n){
    # 每代重新随机选择死亡个体和繁殖个体
    ind_die <- sample(1:n, size=1)
    ind_repr <- sample(1:n, size=1)
    # 死亡个体被繁殖个体的后代替换
    population[ind_die] <- population[ind_repr]
  }
  return(population)
}
# 测试n=5的场景
simulate_moran(5)

运行上述代码,返回结果只会是全0或者全1的向量,符合要求。


内容的提问来源于stack exchange,提问作者Charles-David Bisson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 03:54:05