繁体   English   中英

R:如何在 for 循环中递增递增变量?

[英]R: How to increment the incrementing variable within a for loop?

我试图在满足条件时手动增加i变量。

for(i in 1:x){
   if(condition){
      i <- i + 2
      }
   }

调试时, (i<-i+2) 行肯定正在运行,但 i 仍然只增加 1,而不是 3。(行中的 +2 和自动增量中的额外 +1)

当我在循环中时如何增加?

所以基本上你想根据条件跳过一些循环迭代。 这是一个理所当然地不赞成的设计选择,但如果必须,您需要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)
}

运行循环时,变量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
}

一旦创建了序列,您就几乎失去了对循环的很多控制。 在这种情况下,我将其更改为 while 循环,然后在循环结束时进行条件递增/递减。

我同意 joris-meys 的观点,这是“不赞成”的。 但是......更简单的方法是:

for(i in (0:3)*2+1){
  cat(i," ")
}

或者

for(i in (1:4)){
  cat(i," ")
}
for(i in seq(0, 10, 2) ){
  print(i)
}

你可以这样做..

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM