我对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
Run Code Online (Sandbox Code Playgroud)
我原以为这个代码会永远运行,只分配1个.有没有办法如何在循环中向后退一步或者我必须采取完全不同的方法?
非常感谢提前!
for循环的工作方式是,如果你有for (i in 1:10),首先i设置为1,并执行循环体.然后我们回到顶部并i设置为2,然后再次执行循环体.基本上,这个循环:
for (x in 1:3) {
print(x^2)
}
Run Code Online (Sandbox Code Playgroud)
相当于这段代码:
x = 1
print(x^2)
x = 2
print(x^2)
x = 3
print(x^2)
Run Code Online (Sandbox Code Playgroud)
因此,通过更改将循环回滚一步的尝试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))
}
}
Run Code Online (Sandbox Code Playgroud)