# ifelse {base}

### Description

`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`

.

### Usage

ifelse(test, yes, no)

### Arguments

- test
- an object which can be coerced to logical mode.
- yes
- return values for true elements of
`test`

. - no
- return values for false elements of
`test`

.

### Details

If `yes`

or `no`

are too short, their elements are recycled. `yes`

will be evaluated if and only if any element of `test`

is true, and analogously for `no`

.

Missing values in `test`

give missing values in the result.

### Values

A vector of the same length and attributes (including dimensions and `"class"`

) as `test`

and data values from the values of `yes`

or `no`

. The mode of the answer will be coerced from logical to accommodate first any values taken from `yes`

and then any values taken from `no`

.

### Warning

The mode of the result may depend on the value of `test`

(see the examples), and the class attribute (see `oldClass`

) of the result is taken from `test`

and may be inappropriate for the values selected from `yes`

and `no`

.

Sometimes it is better to use a construction such as

(tmp <- yes; tmp[!test] <- no[!test]; tmp)

, possibly extended to handle missing values in `test`

.

### References

Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) *The New S Language*. Wadsworth & Brooks/Cole.

### See Also

`if`

.

### Examples

x <- c(6:-4) sqrt(x) #- gives warning sqrt(ifelse(x >= 0, x, NA)) # no warning ## Note: the following also gives the warning ! ifelse(x >= 0, sqrt(x), NA) ## example of different return modes: yes <- 1:3 no <- pi^(0:3) typeof(ifelse(NA, yes, no)) # logical typeof(ifelse(TRUE, yes, no)) # integer typeof(ifelse(FALSE, yes, no)) # double

Documentation reproduced from R 3.0.2. License: GPL-2.