ifelse                 package:base                 R Documentation

Conditional Element Selection

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.

Value:

     A vector of the same length and attributes (including 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', and the
     class attribute 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

