-----Original Message-----
From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-
project.org] On Behalf Of Mike Jones
Sent: December-27-07 6:08 PM
To: Peter Dalgaard
Cc: r-help at stat.math.ethz.ch
Subject: Re: [R] 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
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]]