[R] Conditionally incrementing a loop counter: Take 2
Peter Dalgaard
p.dalgaard at biostat.ku.dk
Thu Dec 27 23:35:58 CET 2007
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
More information about the R-help
mailing list