Re: [R] Conditionally incrementing a loop counter: Take 2

From: Mike Jones <MikeJones_at_westat.com>
Date: Thu, 27 Dec 2007 18:08:26 -0500


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

______________________________________________
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.
Received on Thu 27 Dec 2007 - 23:11:07 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Fri 28 Dec 2007 - 20:30:21 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.