Just drop the “+” if you want logical. 

Sent from my iPhone

> On Feb 1, 2021, at 9:36 PM, Shaami <nzsh...@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 <dwinsem...@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 <nzsh...@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, <dwinsem...@comcast.net> 
>>>> wrote:
>>>> 
>>>> On 1/31/21 1:26 PM, Berry, Charles wrote:
>>>> >
>>>> >> On Jan 30, 2021, at 9:32 PM, Shaami <nzsh...@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]]

______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to