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.