Conditionally incrementing a loop counter: Take 2
Since I didn't want the i to increment in the loop when the condition is not met, then in my example I wanted the loop to actually run 14 times instead of the 10 since I wanted 4 of the iterations to be thrown away, or ignored. I still haven't been able to figure this out. Going the "while" route doesn't seem to work for me either.
nums <- numeric(10)
i <- 1
garbage <- 0
while (i <= 10){
x <- runif(1)
cat("x = ",x,"\n")
if (x < 0.1){
nums[i] <- x
i <- i + 1
}
else{
garbage <- garbage+1
}
cat("i = ",i,"garbage = ",garbage,"\n")
}
-----Original Message-----
From: Peter Dalgaard [mailto:p.dalgaard at biostat.ku.dk]
Sent: Thursday, December 27, 2007 5:36 PM
To: Mike Jones
Cc: r-help at stat.math.ethz.ch
Subject: Re: [R] Conditionally incrementing a loop counter: Take 2
Mike Jones wrote:
My apologies for not including a working example.
Here it is:
for (i in 1:10){
cat("initial i = ",i,"\n")
x <- runif(1)
if (x > 0.7){
i <- i-1
}
cat("second i = ",i,"\n")
}
When I ran this i got what follows, so there were four cases where I
wanted the i not to increment.
initial i = 1
second i = 1
initial i = 2
second i = 1
initial i = 3
second i = 3
initial i = 4
second i = 3
initial i = 5
second i = 4
initial i = 6
second i = 6
initial i = 7
second i = 7
initial i = 8
second i = 7
initial i = 9
second i = 9
initial i = 10
second i = 10
Is this the kind of effect you want?
> x <- runif(10)
> cbind(x, 1:10, cumsum(x < .7))
x
[1,] 0.384165631 1 1
[2,] 0.392715845 2 2
[3,] 0.895936431 3 2
[4,] 0.910242185 4 2
[5,] 0.689987301 5 3
[6,] 0.237071326 6 4
[7,] 0.225032680 7 5
[8,] 0.001856286 8 6
[9,] 0.392034868 9 7
[10,] 0.655076045 10 8
If you insist on using a loop, you need to separate the loop control
from the manipulation of i, as in (e.g.)
i <- 0
for (j in 1:10){
i <- i + 1
cat("initial i = ",i,"\n")
x <- runif(1)
if (x > 0.7){
i <- i-1
}
cat("second i = ",i,"\n")
}
-----Original Message-----
From: Mike Jones
Sent: Thursday, December 27, 2007 4:35 PM
To: 'r-help at lists.R-project.org'
Subject: Conditionally incrementing a loop counter
Hi,
I am trying a for loop from 1 to 10 by 1. However, if a condition
does not get met, I want to "throw away" that iteration. So if my
loop is for (i in 1:10) and i is say, 4 and the condition is not met
then I don't want i to go up to 5. Is there a way to do that? I
can't seem to manually adjust i because from what I understand, R
creates 10 long vector and uses that to "loops thru" and I'm not sure
how to get at the index of that vector. Any suggestions? Thanks in
advance.
Mike Jones
Westat
1650 Research Blvd. RE401
Rockville, MD 20850
Ph: 240.314.2312
[[alternative HTML version deleted]]
______________________________________________ R-help at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.
O__ ---- Peter Dalgaard ?ster Farimagsgade 5, Entr.B c/ /'_ --- Dept. of Biostatistics PO Box 2099, 1014 Cph. K (*) \(*) -- University of Copenhagen Denmark Ph: (+45) 35327918 ~~~~~~~~~~ - (p.dalgaard at biostat.ku.dk) FAX: (+45) 35327907