# [R] Puzzled at ifelse()

Prof Brian Ripley ripley at stats.ox.ac.uk
Tue Jul 12 13:58:40 CEST 2005

```This is working exactly as documented.  Nothing `breaks'!

What does the help page say?

'ifelse' returns a value with the same shape as 'test' which is
filled with elements selected from either 'yes' or 'no' depending
on whether the element of 'test' is 'TRUE' or 'FALSE'.

'test' is of length one and true, so you got the first element of 'yes',
which is a list as the first (and only) element of the answer.

On Tue, 12 Jul 2005, Ajay Narottam Shah wrote:

> I have a situation where this is fine:
>
>  > if (length(x)>15) {
>      clever <- rr.ATM(x, maxtrim=7)
>    } else {
>      clever <- rr.ATM(x)
>    }
>  > clever
>  \$ATM
>  [1] 1848.929
>
>  \$sigma
>  [1] 1.613415
>
>  \$trim
>  [1] 0
>
>  \$lo
>  [1] 1845.714
>
>  \$hi
>  [1] 1852.143
>
> But this variant, using ifelse(), breaks:
>
>  > clever <- ifelse(length(x)>15, rr.ATM(x, maxtrim=7), rr.ATM(x))
>  > clever
>  [[1]]
>  [1] 1848.929
>
> What am I doing wrong?

--
Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595

```