[R] dependent nested for loops in R

David Winsemius dw|n@em|u@ @end|ng |rom comc@@t@net
Mon Feb 1 07:00:55 CET 2021


On 1/31/21 1:26 PM, Berry, Charles wrote:
>
>> On Jan 30, 2021, at 9:32 PM, Shaami <nzshaam using gmail.com> wrote:
>>
>> Hi
>> I have made the sample code again. Could you please guide how to use
>> vectorization for variables whose next value depends on the previous one?
>>

I agree with Charles that I suspect your results are not what you 
expect. You should try using cat or print to output intermediate results 
to the console. I would suggest you limit your examination to a more 
manageable length, say the first 10 results while you are working out 
your logic. After you have the logic debugged, you can move on to long 
sequences.


This is my suggestion for a more compact solution (at least for the 
inner loop calculation):

set.seed(123)

x <- rnorm(2000)

z <- Reduce( function(x,y) { sum(y+5*x) }, x, accumulate=TRUE)

w<- numeric(2000)

w <-  (1:2000)[ z >4 | z < 1 ]  # In your version the w values get 
overwritten and end up all being 2000


I would also advise making a natural language statement of the problem 
and goals. I'm thinking that you may be missing certain aspects of the 
underying problem.

-- 

David.

>
> Glad to help.
>
> First, it could help you to trace your code.  I suspect that the results are not at all what you want and tracing would help you see that.
>
> I suggest running this revision and printing out x, z, and w.
>
> #+begin_src R
>    w = NULL
>    for(j in 1:2)
>    {
>      z = NULL
>      x = rnorm(10)
>      z[1] = x[1]
>      for(i in 2:10)
>      {
>        z[i] = x[i]+5*z[i-1]
>        if(z[i]>4 | z[i]<1) {
> 	w[j]=i
>        } else {
> 	w[j] = 0
>        }
>      }
>    }
> #+end_src
>
>
> You should be able to see that the value of w can easily be obtained outside of the `i' loop.
>



More information about the R-help mailing list