If you don't like f(if (temp) a else b) then what about temp <- if (test) a else b f(temp)
or temp <- if (test) a else b f(temp) I think its easier to understand if you factor the temp<- out since one immediately then knows the purpose of the statement is to set temp. On 5/22/06, Duncan Murdoch <[EMAIL PROTECTED]> 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. > > 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 > > >> > > > > Gabor> ______________________________________________ > > Gabor> [email protected] mailing list > > Gabor> https://stat.ethz.ch/mailman/listinfo/r-help > > Gabor> PLEASE do read the posting guide! > > http://www.R-project.org/posting-guide.html > > > > ______________________________________________ > > [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 > > ______________________________________________ > [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 > ______________________________________________ [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
