与常用处理TRUEFALSE条件的if相比,switch语句主要用于处理数字或者字符串,并根据输入返回某个分支。

假设输入一个整数nswitch返回从第1个参数开始的第n个参数值:

switch(1, "x", "y")
## [1] "x"
switch(2, "x", "y")
## [1] "y"

如果输入的整数超出了范围,无法匹配相应参数值,不可见的NULL会被返回:

switch(3, "x", "y")

当输入字符串时,switch语句会有不同的处理方式。它将参数名称和输入进行匹配,并返回最先匹配参数的值。

switch("a", a=1, b=2)
## [1] 1
switch("b", a=1, b=2)
## [1] 2

为考虑所有的情况,我们可以增加一个没有参数名的参数来捕获其他输入情况

switch("c", a=1, b=2, 3)
## [1] 3

下面是简单使用的一个例子:

switch_test <- function(x){
    switch(x,
           a = c(1, 2, 3),
           b = list(x = 0, y = 1),
           c = {
               cat("You choose c!\n")
               list(name = "c", value = "something")
           })
}

switch_test("a")
## [1] 1 2 3
switch_test("b")
## $x
## [1] 0
## 
## $y
## [1] 1
switch_test("c")
## You choose c!
## $name
## [1] "c"
## 
## $value
## [1] "something"