Cc?ed the list as should always be your practice. Here?s one way (untested): W <- +(z>4| z<2) # assume z is of length 20 ? David Sent from my iPhone> On Feb 1, 2021, at 7:08 PM, Shaami <nzshaam at gmail.com> wrote: > > ? > Hi Prof. David > > In the following state > > W = (1:2000)[z >4|z<2) > > Could you please guide how I can assign zero if condition is not satisfied? > > Best Regards > > Shaami > >> On Mon, 1 Feb 2021, 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]]
IMTS length 2000 Sent from my iPhone> On Feb 1, 2021, at 9:16 PM, David Winsemius <dwinsemius at comcast.net> wrote: > > ?Cc?ed the list as should always be your practice. > > Here?s one way (untested): > > W <- +(z>4| z<2) # assume z is of length 20 > > ? > David > > Sent from my iPhone > >>> On Feb 1, 2021, at 7:08 PM, Shaami <nzshaam at gmail.com> wrote: >>> >> ? >> Hi Prof. David >> >> In the following state >> >> W = (1:2000)[z >4|z<2) >> >> Could you please guide how I can assign zero if condition is not satisfied? >> >> Best Regards >> >> Shaami >> >>> On Mon, 1 Feb 2021, 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]]
Hi Prof. David Thank you. I will always follow your advice. The suggested code worked. It gives either 1 or 0 depending on the condition to be true. I want index of z for which the condition is true (instead of 1) else zero. Could you please suggest? Thank you Shaami On Tue, Feb 2, 2021 at 10:16 AM David Winsemius <dwinsemius at comcast.net> wrote:> Cc?ed the list as should always be your practice. > > Here?s one way (untested): > > W <- +(z>4| z<2) # assume z is of length 20 > > ? > David > > Sent from my iPhone > > On Feb 1, 2021, at 7:08 PM, Shaami <nzshaam at gmail.com> wrote: > > ? > Hi Prof. David > > In the following state > > W = (1:2000)[z >4|z<2) > > Could you please guide how I can assign zero if condition is not > satisfied? > > Best Regards > > Shaami > > On Mon, 1 Feb 2021, 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]]
Just drop the ?+? if you want logical. Sent from my iPhone> On Feb 1, 2021, at 9:36 PM, Shaami <nzshaam at gmail.com> wrote: > > ? > Hi Prof. David > > Thank you. I will always follow your advice. The suggested code worked. It gives either 1 or 0 depending on the condition to be true. I want index of z for which the condition is true (instead of 1) else zero. Could you please suggest? > > Thank you > > Shaami > >> On Tue, Feb 2, 2021 at 10:16 AM David Winsemius <dwinsemius at comcast.net> wrote: >> Cc?ed the list as should always be your practice. >> >> Here?s one way (untested): >> >> W <- +(z>4| z<2) # assume z is of length 20 >> >> ? >> David >> >> Sent from my iPhone >> >>>> On Feb 1, 2021, at 7:08 PM, Shaami <nzshaam at gmail.com> wrote: >>>> >>> ? >>> Hi Prof. David >>> >>> In the following state >>> >>> W = (1:2000)[z >4|z<2) >>> >>> Could you please guide how I can assign zero if condition is not satisfied? >>> >>> Best Regards >>> >>> Shaami >>> >>>> On Mon, 1 Feb 2021, 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]]