[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