[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