[R] odd feature
Frank E Harrell Jr
f.harrell at vanderbilt.edu
Mon May 22 15:38:52 CEST 2006
Duncan Murdoch 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.
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 <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
>> >>
>>
--
Frank E Harrell Jr Professor and Chair School of Medicine
Department of Biostatistics Vanderbilt University
More information about the R-help
mailing list