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. Thanks. [[alternative HTML version deleted]]
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
A better solution to this problem is to use character indexing: x <- c("Tuesday", "Thursday", "Sunday") c(Monday = 1, Tuesday = 2, Wednesday = 3, Thursday = 4, Friday = 5, Saturday = 6, Sunday = 7)[x] http://adv-r.had.co.nz/Subsetting.html#lookup-tables-character-subsetting Hadley On Mon, Dec 2, 2013 at 6:33 PM, Bill <william108 at gmail.com> 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. > Thanks. > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code.-- http://had.co.nz/