我正在尝试在满足条件时手动递增 i 变量。
for(i in 1:x){
if(condition){
i <- i + 2
}
}
调试时,(i&lt; -i + 2)行肯定在运行,但我仍然只增加1而不是3.(来自行的+2和来自自动增量的额外+1)< / p>
当我在循环中时,如何增加?
答案 0 :(得分:2)
所以基本上你想根据条件跳过一些循环迭代。这是一个合理的设计选择,但如果必须,你需要next
。以下代码跳过第三次,第五次和第七次迭代:
for(i in 1:10){
if(i %in% c(3,5,7)){
next
}
print(i)
}
假设您需要根据特定条件以3递增,那么您可以使用一个临时变量来帮助您跳过许多步骤。请注意,这确实经历了每次迭代,它只是在时间上突破了迭代:
skip <- 0 # the temporary variable helping us keeping track of the iterations
for(i in 1:10){
if(i == 5){ # the condition that causes the skip
skip <- 3
}
if(skip > 0){ # the control that skips as long as necessary
skip <- skip - 1
next
}
print(i)
}
答案 1 :(得分:0)
运行循环时,变量i
的值存储在tmp*
中。这意味着无论何时我们到达循环顶部,i
都会重置。例如
for(i in 1:2){
message(i)
i <- 10
message(i)
}
#1
#10
#2
#10
为了获得你想要的东西,你可以拥有类似的东西:
k =1
for(i in 1:10){
if(condition) k <- k + 2
}
答案 2 :(得分:0)
创建序列后,您几乎失去了对循环的大量控制。在这种情况下,我将其更改为while循环,然后在循环结束时执行条件递增/递减。
答案 3 :(得分:0)
我同意joris-meys,这是“皱眉头”。但是...一种更简单的方法是:
for(i in (0:3)*2+1){
cat(i," ")
}
或
for(i in (1:4)){
cat(i," ")
}
答案 4 :(得分:-2)
for(i in seq(0, 10, 2) ){
print(i)
}
you can do this..