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

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

```