如何在R语言中存储for循环的每次输出并按行保存结果?
解决考拉兹序列步数存储问题
你的核心问题是没有提前准备存储结果的容器,而且循环变量和内部修改的变量重名导致逻辑混乱,下面是修正后的代码:
# 初始化一个长度为1000的整数向量,用来存每个数的步数 results <- integer(1000) # 外层循环用i作为变量,避免和内部修改的变量冲突 for (i in 1:1000) { current_num <- i # 保存当前要计算的数,避免修改循环变量 count <- 0 check <- current_num > 1 # 简化逻辑判断写法 while (check) { if (current_num %% 2 == 1) { current_num <- 3 * current_num + 1 } else { current_num <- current_num / 2 } count <- count + 1 check <- current_num > 1 } # 将当前数的步数存入结果向量对应位置 results[i] <- count } # 按行存储到文件(每行对应一个数的步数) writeLines(as.character(results), "collatz_steps.txt") # 也可以直接查看结果 print(results)
关键改动说明:
- 提前创建
results向量:专门用来存储每个数的步数,彻底解决count被覆盖的问题 - 拆分循环变量和计算变量:原代码里循环变量
n会被while循环修改,导致外层循环逻辑出错,用i做循环变量、current_num存当前计算值,避免了变量冲突 - 简化判断逻辑:直接用
current_num > 1生成布尔值,比ifelse更简洁高效 - 用
writeLines实现按行存储:将结果向量转为字符型后写入文件,每个数的步数单独占一行
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

