switch {base} | R Documentation

## Select One of a List of Alternatives

### Description

`switch` evaluates `EXPR` and accordingly chooses one of the further arguments (in `...`).

### Usage

    switch(EXPR, ...)

### Arguments

`EXPR` | an expression evaluating to a number or a character string.
`...` | the list of alternatives, given explicitly.

### Details

If the value of `EXPR` is an integer between 1 and `nargs()-1` then the corresponding element of `...` is evaluated and the result returned.

If `EXPR` returns a character string then that string is used to match the names of the elements in `...`. If there is an exact match then that element is evaluated and returned if there is one, otherwise the next element is chosen, e.g., `switch("cc", a=1, cc=, d=2)` evaluates to `2`.

In the case of no match, if there's a further argument in `switch` that one is returned, otherwise `NULL`.

### Warning

Beware of partial matching: an alternative `E = foo` will match the first argument `EXPR` unless that is named. See the examples for good practice in naming the first argument.

### References

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

### Examples

    require(stats)
    centre <- function(x, type) {
      switch(type,
            mean = mean(x),
            median = median(x),
            trimmed = mean(x, trim = .1))
    }
    x <- rcauchy(10)
    centre(x, "mean")
    centre(x, "median")
    centre(x, "trimmed")

    ccc <- c("b","QQ","a","A","bb")
    for(ch in ccc) cat(ch,":",switch(EXPR = ch, a=1,    b=2:3),            "\n")
    for(ch in ccc) cat(ch,":",switch(EXPR = ch, a=,A=1, b=2:3, "Otherwise: last"),"\n")

    ## Numeric EXPR don't allow an 'otherwise':
    for(i in c(-1:3,9))  print(switch(i, 1,2,3,4))

[Package Contents]