For循环:我怎么能重复几个步骤?

时间:2015-05-17 22:37:48

标签: r for-loop

我对R来说比较新,对于循环我有点困惑。

我尝试在命中条件命中后在for循环中重复几个步骤。我试图把循环放回一步,但已经认识到循环不断计数并忽略我的命令。这是一个简单的例子来说明我的意思:

a <- 1:10
b <- rep(NA, 15)

fun <- function(){
  i <- 1
  for(i in 1:10){
  b[i] <- a[i]
  i <- i - 1 # This is the line I am talking about.
  }
  return(b)
}
fun()

[1]  1  2  3  4  5  6  7  8  9 10 NA NA NA NA NA

我原以为这段代码会永远运行,只分配1代。有没有办法如何在for循环中向后退一步或者我必须采取完全不同的方法?

提前多多感谢!

1 个答案:

答案 0 :(得分:6)

for循环的工作方式是,如果你有for (i in 1:10),则首先将i设置为1,然后执行循环体。然后我们回到顶部并将i设置为2,然后再次执行循环体。基本上,这个循环:

for (x in 1:3) {
    print(x^2)
}

等同于此代码:

x = 1
print(x^2)
x = 2
print(x^2)
x = 3
print(x^2) 

因此,您尝试通过更改i将循环回滚一步是行不通的,因为for循环实际上并不监视i是什么,它只是运行正文对于原始1:10序列的每个元素,循环一次。

如果您希望有时重复一个步骤,则应使用while循环并手动增加i

a <- 1:10
b <- rep(NA, 15)

i <- 1
while (i <= 10) {
    b[i] <- a[i]
    # Flip a coin, don't move on if it comes up tails
    # Replace this test with the relevant condition you
    #   want to check for
    if (sample(c(0, 1), 1) == 1) {
       i <- i + 1 
    } else {
        print(paste("Repeating with i =", i))
    }
}