[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