R语言for循环遍历动态扩容vector/list仅迭代1次的解决方法
问题原因
R的for循环启动时会一次性求值确定要迭代的完整序列,你在循环内部修改random_number不会改变已经生成的迭代列表,你初始的random_number长度为1,因此循环只会执行1次。
不用while循环的实现方案
你可以改成按索引迭代,同时给for循环设置一个足够覆盖预期场景的迭代上限,在循环内部判断索引是否超过当前random_number的实际长度,超过就主动终止循环即可:
steps <- 1 random_number <- c(sample(20, 1)) # 迭代上限可根据需求调整,只要远大于预期最大步数即可 for (i in 1:10000) { # 索引超过当前向量实际长度时终止循环 if (i > length(random_number)) { break } item <- random_number[i] if(item < 18){ random_number <- c(random_number, sample(20, 1)) steps <- steps + 1 } } print(paste0("It took ", steps, " steps."))
内容的提问来源于stack exchange,提问作者Mohsen_Fatemi
相关产品推荐
相关产品推荐

