[R] dependent nested for loops in R
David Winsemius
dw|n@em|u@ @end|ng |rom comc@@t@net
Tue Feb 2 07:48:02 CET 2021
Sent from my iPhone
> On Feb 1, 2021, at 10:16 PM, David Winsemius <dwinsemius using comcast.net> wrote:
>
> Or perhaps:
>
> W <- 1:2000
> W[z>4|z<2] <- 0
Another way:
W <- (1:2000)*(z>4|z<2)
As I said earlier you really should study logical class vectors and the operators that use them and how to apply them as indices.
> Sent from my iPhone
>
>>> On Feb 1, 2021, at 9:56 PM, David Winsemius <dwinsemius using comcast.net> wrote:
>>>
>> Or perhaps you wanted:
>>
>> W <- z
>> W[z>4|z<2] <- 0
>>
>> Sent from my iPhone
>>
>>>> On Feb 1, 2021, at 9:41 PM, David Winsemius <dwinsemius using comcast.net> wrote:
>>>>
>>> Just drop the “+” if you want logical.
>>>
>>> Sent from my iPhone
>>>
>>>>> On Feb 1, 2021, at 9:36 PM, Shaami <nzshaam using 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 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