如何实现两组粒子切换?现有R脚本存重复值及提前终止问题求助
问题分析与修正代码
原代码的核心问题
- 循环条件逻辑错误:原条件
while(length(setA) >= 0 && length(setB) < 3)逻辑混乱,会在setB长度等于3时强制终止循环,但实际只有当setA为空时setB才会满3;若出现异常情况(比如setA被错误清空但setB未到3),循环会提前停止。正确逻辑应是只要setA还有粒子就继续模拟。 - 元素删除方式错误:用
setA[-particle]是按索引删除元素,而非按值删除。例如setA = c(2,3)时,选到粒子2,setA[-2]会保留索引1的元素(即2),导致setA未正确移除目标粒子,进而出现重复值或逻辑混乱。 - 静态集合变量冗余:原代码中
sets仅初始化时赋值,虽总粒子集合固定,但直接在采样时用c(setA, setB)更直观,避免后续扩展粒子数量时的潜在问题。
修正后的R脚本
setA <- c(1,2,3) setB <- c() time <- 0 # 循环直到所有粒子进入setB(setA为空) while(length(setA) > 0) { # 从当前所有粒子中随机选一个 particle <- sample(c(setA, setB), 1) if (particle %in% setA) { # 将粒子从setA移到setB setA <- setA[setA != particle] setB <- c(setB, particle) } else { # 将粒子从setB移回setA setB <- setB[setB != particle] setA <- c(setA, particle) } time <- time + 5 } cat("反应结束,总时间:", time, "秒\n")
内容的提问来源于stack exchange,提问作者Tori
相关产品推荐
相关产品推荐

