[R] odd feature

Gabor Grothendieck ggrothendieck at gmail.com
Mon May 22 15:31:14 CEST 2006


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 at stats.uwo.ca> wrote:
> On 5/22/2006 3:26 AM, Martin Maechler wrote:
> >>>>>> "Gabor" == Gabor Grothendieck <ggrothendieck at 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 at 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 at 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 at 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 at 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 at 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
>



More information about the R-help mailing list