[R] Trouble Passing a for loop variable (iteration #) to a data frame

2011-04-25 Thread Galen Moore
Greetings - 

 

I am working on a piece of code to simulate vehicle times in and out in each
of a number of parking spaces.  At this stage, my code basically does what
it is supposed to do but for the sequential number of each new parking event
for a given space (i.e., the index of the loop variable).  Instead of
passing the index of the loop variable (iter) to the data frame, it passes
the value of the total number of iterations.  Eventually, the number of
iterations (parking events in a given space) will be determined by an
rnorm() fcn, so I am not looking for a process that locks-in the number of
iterations.  The total eventual data set size is small-ish, so I'm not
worried about speed.

 

I'm sure my problem lies somehow in my setup of the data frames and my
rbind() fcns, but a great many attempts and several hours of searching
online have not yet brought success.

 

Can you please suggest what I need to do to get the iteration # to appear in
the iter vector and therefore to the data frame?

 

Many thanks,

 

Galen 

 

 

 # fabdata3.r

 # fabricate sample data

 

 #declare the mean duration

 dur-.04

 

 #declare the stdDev of the rnorm() fcn (duration)

 varc-.01

 

 sp-numeric()

 iter-numeric()

 ti-numeric()

 to-numeric()

 actdur-numeric()

 #newline-data.frame(sp, iter, ti, to, actdur)

 ds-data.frame(sp, iter, ti, to, actdur)

 

 # BEGIN OUTER LOOP

 for (sp in c(1:3)) {

+ 

+ct-1

+# BEGIN INNER LOOP

+ 

+x - seq(1, 4, by=1)

+for (i in seq(along=x)) {

+ 

+ if (i == 1)   {

+  ti[1]-((.33+rnorm(1, dur, varc)))

+  to[1]-((ti[1]+rnorm(1, dur, varc)))

+  actdur[1]-(to[1]-ti[1])

+  iter-x[1]

+ 

+  }

+  

+ else {

+ # set subsequent time-ins to prev to + a rand#

+ ti[i]-((to[i-1]+rnorm(1, dur, varc)))

+ # calculate each event's time-out

+ to[i]-((ti[i]+rnorm(1, dur, varc)))

+ # calculate each event's actual duration

+ actdur[i]-(to[i]-ti[i])

+ iter-x[i]

+ 

+ }

+  spStep-paste(sp Value is , sp)

+  print(spStep)

+  iterStep-paste(iter Value is , iter)

+  print(iterStep)

+  

+ newrow-data.frame(sp, iter, ti, to, actdur)

+ ct=ct+1

+  }  #END INNER LOOP

+  ds-rbind(ds, newrow)

+ }

[1] sp Value is  1

[1] iter Value is  1

[1] sp Value is  1

[1] iter Value is  2

[1] sp Value is  1

[1] iter Value is  3

[1] sp Value is  1

[1] iter Value is  4

[1] sp Value is  2

[1] iter Value is  1

[1] sp Value is  2

[1] iter Value is  2

[1] sp Value is  2

[1] iter Value is  3

[1] sp Value is  2

[1] iter Value is  4

[1] sp Value is  3

[1] iter Value is  1

[1] sp Value is  3

[1] iter Value is  2

[1] sp Value is  3

[1] iter Value is  3

[1] sp Value is  3

[1] iter Value is  4

 print(ds)

   sp itertito actdur

1   14 0.3600055 0.4123550 0.05234955

2   14 0.4343887 0.4640804 0.02969170

3   14 0.5240268 0.5622272 0.03820032

4   14 0.5945877 0.6436489 0.04906118

5   24 0.3694827 0.4166405 0.04715775

6   24 0.4609841 0.4968517 0.03586767

7   24 0.5357721 0.5735439 0.03777185

8   24 0.6207077 0.6512799 0.03057217

9   34 0.3801887 0.4122605 0.03207179

10  34 0.4440002 0.4916171 0.04761685

11  34 0.5380228 0.5791549 0.04113214

12  34 0.6087923 0.6291451 0.02035284

 # END OUTER LOOP

   


[[alternative HTML version deleted]]

__
R-help@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.


Re: [R] Trouble Passing a for loop variable (iteration #) to a data frame

2011-04-25 Thread Peter Langfelder
You need to index the variable iter: instead of iter = x[i], say

iter[i] = x[i].

But a better solution is to simply say

iter = x

at the beginning and don't update it in the loop.

The way your code is written, iter just holds the last x[i], and the
last x[i] at the end of each loop is 4.

Peter

On Mon, Apr 25, 2011 at 3:29 PM, Galen Moore galen.a.mo...@gmail.com wrote:
 Greetings -



 I am working on a piece of code to simulate vehicle times in and out in each
 of a number of parking spaces.  At this stage, my code basically does what
 it is supposed to do but for the sequential number of each new parking event
 for a given space (i.e., the index of the loop variable).  Instead of
 passing the index of the loop variable (iter) to the data frame, it passes
 the value of the total number of iterations.  Eventually, the number of
 iterations (parking events in a given space) will be determined by an
 rnorm() fcn, so I am not looking for a process that locks-in the number of
 iterations.  The total eventual data set size is small-ish, so I'm not
 worried about speed.



 I'm sure my problem lies somehow in my setup of the data frames and my
 rbind() fcns, but a great many attempts and several hours of searching
 online have not yet brought success.



 Can you please suggest what I need to do to get the iteration # to appear in
 the iter vector and therefore to the data frame?



 Many thanks,



 Galen





 # fabdata3.r

 # fabricate sample data



 #declare the mean duration

 dur-.04



 #declare the stdDev of the rnorm() fcn (duration)

 varc-.01



 sp-numeric()

 iter-numeric()

 ti-numeric()

 to-numeric()

 actdur-numeric()

 #newline-data.frame(sp, iter, ti, to, actdur)

 ds-data.frame(sp, iter, ti, to, actdur)



 # BEGIN OUTER LOOP

 for (sp in c(1:3)) {

 +

 +            ct-1

 +            # BEGIN INNER LOOP

 +

 +            x - seq(1, 4, by=1)

 +            for (i in seq(along=x)) {

 +

 +                         if (i == 1)   {

 +                          ti[1]-((.33+rnorm(1, dur, varc)))

 +                          to[1]-((ti[1]+rnorm(1, dur, varc)))

 +                          actdur[1]-(to[1]-ti[1])

 +                          iter-x[1]

 +

 +                          }

 +

 +                         else {

 +                         # set subsequent time-ins to prev to + a rand#

 +                         ti[i]-((to[i-1]+rnorm(1, dur, varc)))

 +                         # calculate each event's time-out

 +                         to[i]-((ti[i]+rnorm(1, dur, varc)))

 +                         # calculate each event's actual duration

 +                         actdur[i]-(to[i]-ti[i])

 +                         iter-x[i]

 +

 +                         }

 +                          spStep-paste(sp Value is , sp)

 +                          print(spStep)

 +                          iterStep-paste(iter Value is , iter)

 +                          print(iterStep)

 +

 +                         newrow-data.frame(sp, iter, ti, to, actdur)

 +                         ct=ct+1

 +                  }  #END INNER LOOP

 +                  ds-rbind(ds, newrow)

 +             }

 [1] sp Value is  1

 [1] iter Value is  1

 [1] sp Value is  1

 [1] iter Value is  2

 [1] sp Value is  1

 [1] iter Value is  3

 [1] sp Value is  1

 [1] iter Value is  4

 [1] sp Value is  2

 [1] iter Value is  1

 [1] sp Value is  2

 [1] iter Value is  2

 [1] sp Value is  2

 [1] iter Value is  3

 [1] sp Value is  2

 [1] iter Value is  4

 [1] sp Value is  3

 [1] iter Value is  1

 [1] sp Value is  3

 [1] iter Value is  2

 [1] sp Value is  3

 [1] iter Value is  3

 [1] sp Value is  3

 [1] iter Value is  4

             print(ds)

   sp iter        ti        to     actdur

 1   1    4 0.3600055 0.4123550 0.05234955

 2   1    4 0.4343887 0.4640804 0.02969170

 3   1    4 0.5240268 0.5622272 0.03820032

 4   1    4 0.5945877 0.6436489 0.04906118

 5   2    4 0.3694827 0.4166405 0.04715775

 6   2    4 0.4609841 0.4968517 0.03586767

 7   2    4 0.5357721 0.5735439 0.03777185

 8   2    4 0.6207077 0.6512799 0.03057217

 9   3    4 0.3801887 0.4122605 0.03207179

 10  3    4 0.4440002 0.4916171 0.04761685

 11  3    4 0.5380228 0.5791549 0.04113214

 12  3    4 0.6087923 0.6291451 0.02035284

 # END OUTER LOOP




        [[alternative HTML version deleted]]

 __
 R-help@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.


__
R-help@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.


Re: [R] Trouble Passing a for loop variable (iteration #) to a data frame

2011-04-25 Thread Galen Moore
Thank you very much, Peter.  The  iter[i] = x[i] solution worked
perfectly.

Galen

-Original Message-
From: Peter Langfelder [mailto:peter.langfel...@gmail.com] 
Sent: Monday, April 25, 2011 17:07
To: galen.a.mo...@gmail.com
Cc: r-help@r-project.org
Subject: Re: [R] Trouble Passing a for loop variable (iteration #) to a data
frame

You need to index the variable iter: instead of iter = x[i], say

iter[i] = x[i].

But a better solution is to simply say

iter = x

at the beginning and don't update it in the loop.

The way your code is written, iter just holds the last x[i], and the last
x[i] at the end of each loop is 4.

Peter

On Mon, Apr 25, 2011 at 3:29 PM, Galen Moore galen.a.mo...@gmail.com
wrote:
 Greetings -



 I am working on a piece of code to simulate vehicle times in and out 
 in each of a number of parking spaces.  At this stage, my code 
 basically does what it is supposed to do but for the sequential number 
 of each new parking event for a given space (i.e., the index of the 
 loop variable).  Instead of passing the index of the loop variable 
 (iter) to the data frame, it passes the value of the total number of 
 iterations.  Eventually, the number of iterations (parking events in a 
 given space) will be determined by an
 rnorm() fcn, so I am not looking for a process that locks-in the 
 number of iterations.  The total eventual data set size is small-ish, 
 so I'm not worried about speed.



 I'm sure my problem lies somehow in my setup of the data frames and my
 rbind() fcns, but a great many attempts and several hours of searching 
 online have not yet brought success.



 Can you please suggest what I need to do to get the iteration # to 
 appear in the iter vector and therefore to the data frame?



 Many thanks,



 Galen





 # fabdata3.r

 # fabricate sample data



 #declare the mean duration

 dur-.04



 #declare the stdDev of the rnorm() fcn (duration)

 varc-.01



 sp-numeric()

 iter-numeric()

 ti-numeric()

 to-numeric()

 actdur-numeric()

 #newline-data.frame(sp, iter, ti, to, actdur)

 ds-data.frame(sp, iter, ti, to, actdur)



 # BEGIN OUTER LOOP

 for (sp in c(1:3)) {

 +

 +            ct-1

 +            # BEGIN INNER LOOP

 +

 +            x - seq(1, 4, by=1)

 +            for (i in seq(along=x)) {

 +

 +                         if (i == 1)   {

 +                          ti[1]-((.33+rnorm(1, dur, varc)))

 +                          to[1]-((ti[1]+rnorm(1, dur, varc)))

 +                          actdur[1]-(to[1]-ti[1])

 +                          iter-x[1]

 +

 +                          }

 +

 +                         else {

 +                         # set subsequent time-ins to prev to + a 
 + rand#

 +                         ti[i]-((to[i-1]+rnorm(1, dur, varc)))

 +                         # calculate each event's time-out

 +                         to[i]-((ti[i]+rnorm(1, dur, varc)))

 +                         # calculate each event's actual duration

 +                         actdur[i]-(to[i]-ti[i])

 +                         iter-x[i]

 +

 +                         }

 +                          spStep-paste(sp Value is , sp)

 +                          print(spStep)

 +                          iterStep-paste(iter Value is , iter)

 +                          print(iterStep)

 +

 +                         newrow-data.frame(sp, iter, ti, to, actdur)

 +                         ct=ct+1

 +                  }  #END INNER LOOP

 +                  ds-rbind(ds, newrow)

 +             }

 [1] sp Value is  1

 [1] iter Value is  1

 [1] sp Value is  1

 [1] iter Value is  2

 [1] sp Value is  1

 [1] iter Value is  3

 [1] sp Value is  1

 [1] iter Value is  4

 [1] sp Value is  2

 [1] iter Value is  1

 [1] sp Value is  2

 [1] iter Value is  2

 [1] sp Value is  2

 [1] iter Value is  3

 [1] sp Value is  2

 [1] iter Value is  4

 [1] sp Value is  3

 [1] iter Value is  1

 [1] sp Value is  3

 [1] iter Value is  2

 [1] sp Value is  3

 [1] iter Value is  3

 [1] sp Value is  3

 [1] iter Value is  4

             print(ds)

   sp iter        ti        to     actdur

 1   1    4 0.3600055 0.4123550 0.05234955

 2   1    4 0.4343887 0.4640804 0.02969170

 3   1    4 0.5240268 0.5622272 0.03820032

 4   1    4 0.5945877 0.6436489 0.04906118

 5   2    4 0.3694827 0.4166405 0.04715775

 6   2    4 0.4609841 0.4968517 0.03586767

 7   2    4 0.5357721 0.5735439 0.03777185

 8   2    4 0.6207077 0.6512799 0.03057217

 9   3    4 0.3801887 0.4122605 0.03207179

 10  3    4 0.4440002 0.4916171 0.04761685

 11  3    4 0.5380228 0.5791549 0.04113214

 12  3    4 0.6087923 0.6291451 0.02035284

 # END OUTER LOOP




        [[alternative HTML version deleted]]

 __
 R-help@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.