与处理 TRUE 和 FALSE 条件的 if 相比,switch 语句则是用来处理数字或者字符串,

并根据输入返回某个分支。

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

switch(1, "x", "y")

## [1] "x"

switch(2, "x", "y")

## [1] "y"

如果输入的整数超出范围,无法匹配任何给定参数的话,就不会明确返回某个可见值

(实际上,不可见的 NULL 会被返回):

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

当输入字符串时,switch( ) 语句会有不同的处理方式。它会将参数名称与输入进

行匹配,并返回最先匹配的参数的值(如果匹配多个参数,则返回第 1 个参数对应的值):

switch("a", a = 1, b = 2)

## [1] 1

switch("b", a = 1, b = 2)

## [1] 2

对于第 1 个 switch 语句,a=1 匹配变量 a,对于第 2 个,b=2 匹配变量 b。如果没

有参数与输入匹配的话,不可见的 NULL 将被返回:

switch("c", a = 1, b = 2)

为了考虑所有可能情况,我们可以增加最后一个参数(没有参数名)来捕获所有其他输入:

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

## [1] 3

与 ifelse( ) 语句相比较,switch( ) 语句更像 if( ) 语句。它们只接受单值输

入(字符串的数目)却可以返回任何值:

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"

总而言之,if、ifelse( ) 和 switch( ) 的性质略有不同,具体使用哪个,视情况而定。