Re: [R] odd feature

From: Gabor Grothendieck <ggrothendieck_at_gmail.com>
Date: Mon 22 May 2006 - 23:31:14 EST

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 <murdoch@stats.uwo.ca> wrote:
> On 5/22/2006 3:26 AM, Martin Maechler wrote:
> >>>>>> "Gabor" == Gabor Grothendieck <ggrothendieck@gmail.com>
> >>>>>> 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 <ivowel@gmail.com> 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
> > >>
> > >> ______________________________________________
> > >> R-help@stat.math.ethz.ch 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> R-help@stat.math.ethz.ch 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
> >
> > ______________________________________________
> > R-help@stat.math.ethz.ch mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-help
> > PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
>

> ______________________________________________
> R-help@stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
>

R-help@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html Received on Mon May 22 23:35:53 2006

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.1.8, at Tue 23 May 2006 - 00:10:17 EST.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.