[R] ifelse -does it "manage the indexing"?
Duncan Murdoch
murdoch.duncan at gmail.com
Tue Dec 3 02:09:17 CET 2013
On 13-12-02 7:49 PM, Bill wrote:
> It seems so inefficient. I mean the whole first vector will be
> evaluated. Then if the second if is run the whole vector will be
> evaluated again. Then if the next if is run the whole vector will be
> evaluted again. And so on. And this could be only to test the first
> element (if it is false for each if statement). Then this would be
> repeated again and again. Is that really the way it works? Or am I not
> thinking clearly?
Read the manual.
Duncan Murdoch
>
>
> On Mon, Dec 2, 2013 at 4:48 PM, Duncan Murdoch <murdoch.duncan at gmail.com
> <mailto:murdoch.duncan at gmail.com>> wrote:
>
> On 13-12-02 7:33 PM, Bill wrote:
>
> ifelse ((day_of_week == "Monday"),1,
> ifelse ((day_of_week == "Tuesday"),2,
> ifelse ((day_of_week == "Wednesday"),3,
> ifelse ((day_of_week == "Thursday"),4,
> ifelse ((day_of_week == "Friday"),5,
> ifelse ((day_of_week == "Saturday"),6,7)))))))
>
>
> In code like the above, day_of_week is a vector and so
> day_of_week ==
> "Monday" will result in a boolean vector. Suppose day_of_week is
> Monday,
> Thursday, Friday, Tuesday. So day_of_week == "Monday" will be
> True,False,False,False. I think that ifelse will test the first
> element and
> it will generate a 1. At this point it will not have run
> day_of_week ==
> "Tuesday" yet. Then it will test the second element of
> day_of_week and it
> will be false and this will cause it to evaluate day_of_week ==
> "Tuesday".
> My question would be, does the evaluation of day_of_week ==
> "Tuesday"
> result in the generation of an entire boolean vector (which
> would be in
> this case False,False,False,True) or does the ifelse "manage the
> indexing"
> so that it only tests the second element of the original vector
> (which is
> Thursday) and for that matter does it therefore not even bother
> to generate
> the first boolean vector I mentioned above
> (True,False,False,False) but
> rather just checks the first element?
> Not sure if I have explained this well but if you understand
> I would
> appreciate a reply.
>
>
> See the help for the function. If any element of the test is true,
> the full first vector will be evaluated. If any element is false,
> the second one will be evaluated. There are no shortcuts of the
> kind you describe.
>
> Duncan Murdoch
>
>
More information about the R-help
mailing list