[R] dependent nested for loops in R

Shaami nz@h@@m @end|ng |rom gm@||@com
Tue Feb 2 06:36:25 CET 2021


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 using 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 using 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 using comcast.net>
> wrote:
>
>>
>> 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.
>> >
>>
>

	[[alternative HTML version deleted]]



More information about the R-help mailing list