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

R语言while循环配置:如何确保循环仅在双条件同时满足时退出

核心错误点

你的代码有两个直接导致逻辑不符合预期的问题:

  1. while循环的判定逻辑完全写反。你需要的是「两个终止条件同时满足才退出」,但原判定c1_i + c2_i + c3_i < 15 && nrow_i > 5的含义是「必须同时满足总和小于15、重复行数大于5才继续循环」,只要任意一个条件不满足——比如总和先超过15,哪怕重复行数是19——循环都会直接终止,这就是你拿到的结果nrow_i始终不符合要求的核心原因。
  2. 循环启动前没有给nrow_i赋初始值,第一次循环判定时要么直接报变量不存在的错误,要么会调用全局环境里残留的同名变量,导致第一次循环的进入逻辑完全不可控。
修正后可直接运行的代码
library(dplyr)
list_results <- list()
for (i in 1:100){
    
    # 初始化所有循环内变量,nrow_i初始值设为大于5的数,保证第一次能正常进入循环
    c1_i = c2_i = c3_i = ctotal_i = 0
    nrow_i = 100
    
    # 循环继续规则:只要总和没超过15,或者重复行数≥5,就持续采样不退出
    while(ctotal_i <= 15 || nrow_i >= 5) {
        num_1_i = sample_n(iris, 30)
        num_2_i = sample_n(iris, 30)
        num_3_i = sample_n(iris, 30)
        
        c1_i = mean(num_1_i$Sepal.Length)
        c2_i = mean(num_2_i$Sepal.Length)
        c3_i = mean(num_3_i$Sepal.Length)
        ctotal_i = c1_i + c2_i + c3_i
        
        combined_i = rbind(num_1_i, num_2_i, num_3_i)
        nrow_i = nrow(unique(combined_i[duplicated(combined_i), ]))
    }
    
    inter_results_i <- data.frame(i, c1_i, c2_i, c3_i, ctotal_i, nrow_i)
    list_results[[i]] <- inter_results_i
}
逻辑说明
  • 修正后的循环判定用||(或)连接两个继续运行的条件,等价于!(ctotal_i > 15 && nrow_i <5),也就是只有当「总和>15」「重复行数<5」两个条件同时满足时,循环才会终止,完全匹配你设定的规则。
  • 代码没有做任何采样效率优化,会一直随机抽样直到命中符合要求的结果,完全适配你不介意运行时长的需求。
  • 所有循环内变量都在for循环迭代内初始化,不会受全局环境残留变量的干扰,每一轮for循环的运行逻辑完全独立。

内容的提问来源于stack exchange,提问作者stats_noob

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 09:33:28