Hi David and Charles
Your suggestions helped me a lot. Could you please suggest how I could
vectorize the following for loop?
z = NULL
p = 0.25
x = rnorm(100)
z[1] = p*x[1] + (1-p)*5
for(i in 2:100)
{
z[i] = p*x[i]+(1-p)*z[i-1]
}
Thank you
Regards
On Mon, Feb 1, 2021 at 11:01 AM David Winsemius <dwinsemius at
comcast.net>
wrote:
>
> On 1/31/21 1:26 PM, Berry, Charles wrote:
> >
> >> On Jan 30, 2021, at 9:32 PM, Shaami <nzshaam at 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.
> >
>
[[alternative HTML version deleted]]