Duncan Murdoch wrote: > On 5/22/2006 3:26 AM, Martin Maechler wrote: > >>>>>>>"Gabor" == Gabor Grothendieck <[EMAIL PROTECTED]> >>>>>>> on Sun, 21 May 2006 09:47:07 -0400 writes: >> >> Gabor> If you know that test is a scalar >> >> Gabor> result <- if (test) a else b >> >> Gabor> will do it. >> >>Yes, indeed! >>IMO, ifelse(test, a, b) is much overused where as >> if(test) a else b is much UNDER used. >> >>>From some e-mail postings, and even some documents (even printed >>books?), I get the impression that too many people think that >> ifelse(.,.,.) is to be used as expression / function and >> if(.) . else . only for "program flow control". >>This leads to quite suboptimal code, and I personally use >>if(.) . else . __as expression__ much more frequently than ifelse(.,.,.) > > > For overuse of ifelse(), do you mean cases where test is length 1, so > if() would work? Or are you thinking of something else? > > I'd also be interested in what you mean by "quite suboptimal" code. Are > you thinking of things like > > if (test) > temp <- a > else > temp <- b > result <- f(temp) > > versus > > result <- f( if (test) a else b ) > > ? > > I would generally use the former, because it's easier to get the > formatting right, and I find it easier to read. It's suboptimal in > speed and memory use because of creating the temp variable, but in most > cases I think that would be such a small difference that the small > increase in readability is worthwhile.
IMHO that approach too verbose and not more readable. Frank > > Duncan Murdoch > > >> >>Martin Maechler, ETH Zurich. >> >> Gabor> Here is another approach: >> >> Gabor> as.vector(test * ts(a) + (!test) * ts(b)) >> >> >> >> Gabor> On 5/21/06, ivo welch <[EMAIL PROTECTED]> wrote: >> >> Dear R wizards: >> >> >> >> I just got stung by the ifelse() feature. >> >> >> >> > a <- 10:15 >> >> > b <- 20:300 >> >> > test <- 1 >> >> > ifelse(test,a,b) >> >> [1] 10 >> >> >> >> I had not realized that this was the default behavior---I had expected >> >> 10:15. mea culpa. however, I wonder whether it would make sense to >> >> replace ifelse with a different semantic, where if test is a single >> >> scalar, it means what a stupid user like me would imagine. >> >> >> >> Aside, I like the flexibility of R, but I am not thrilled by all the >> >> recycling rules. I either mean I want a scalar or a vector of >> >> equal/appropriate dimension. I never want a recycle of a smaller >> >> vector. (I do often use a recycle of a scalar.) >> >> >> >> regards, >> >> >> >> /iaw >> >> >> >> ______________________________________________ >> >> [email protected] mailing list >> >> https://stat.ethz.ch/mailman/listinfo/r-help >> >> PLEASE do read the posting guide! >> http://www.R-project.org/posting-guide.html >> >> >> -- Frank E Harrell Jr Professor and Chair School of Medicine Department of Biostatistics Vanderbilt University ______________________________________________ [email protected] mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
