[R] dependent nested for loops in R

Berry, Charles ccberry @end|ng |rom he@|th@uc@d@edu
Sun Jan 31 22:26:13 CET 2021



> 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?
> 


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.

-- 

If inspecting those results did not make you go back and rethink your approach, try writing the expression for 

z[n] = x[n] + ... + k * x[1]

If you are not good with algebra write out each of z[1], z[2], z[3] and z[4] in terms of x[1:4] and then look at what you have.

Perhaps the value of `k' will surprise you.

In any case, if the code is truly what you intended, you only need x[1:25] to get z[n] to double precision for any n.  So, 

Also, you will hardly ever be able to compute the value of z[n] for n > 450. 

If these last two statements are puzzling, see https://en.wikipedia.org/wiki/Floating-point_arithmetic

HTH,
Chuck

> w = NULL
> 
> for(j in 1:1000)
> 
> {
> 
>  z = NULL
> 
>  x = rnorm(2000)
> 
>  z[1] = x[1]
> 
>  for(i in 2:2000)
> 
>  {
> 
>    z[i] = x[i]+5*z[i-1]
> 
>    if(z[i]>4 | z[i]<1) {
> 
>      w[j]=i
> 
>    } else {
> 
>      w[j] = 0
> 
>    }
> 
>  }
> 
> }
> 



More information about the R-help mailing list