[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