R语言循环输出异常:为何无法生成1-100连续值?如何修复?
问题分析与解决方案
咱们先拆解一下你这段代码为啥会跳着输出——核心问题出在R语言的运算符优先级和你写的表达式逻辑上。
先看你循环里的输出语句:print(20*(i-1)+1:20*i)
R里的运算符优先级是有规矩的,其中:(序列生成)的优先级比*(乘法)和+(加法)都高。所以你写的1:20*i会先执行1:20生成序列1,2,...,20,再乘以i,得到i,2i,...,20i;然后加上20*(i-1),最终的结果就变成了:
- 当i=1时:
0 + 1*1到20*1→ 1-20(这步是对的) - 当i=2时:
20 + 2,4,...,40→ 22,24,...,60(这里就开始跳了) - 后续i=3、4、5的时候,结果会是43-63(步长3)、64-84(步长4)、85-105(步长5),完全不是你想要的连续1-100。
那该怎么改呢?你要的是每次循环生成从20*(i-1)+1到20*i的连续序列,直接把这个区间用:生成就行,不用拆分计算。修改后的代码如下:
t <-5 for (i in 1:t){ print( (20*(i-1)+1) : (20*i) ) }
这样循环的时候:
- i=1:
1:20→ 1-20 - i=2:
21:40→21-40 - ...
- i=5:
81:100→81-100
完美输出1到100的连续数字,分五次循环打印出来。另外如果想一次性输出1-100,其实不用循环,直接print(1:100)就行,但如果必须用循环分批次输出,上面的修改就完全没问题啦。
内容的提问来源于stack exchange,提问作者Paul




