使用 switch 对值进行分支

与处理 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( ) 的性质略有不同,具体使用哪个,视情况而定。

posted @ 2019-01-22 10:53  NAVYSUMMER  阅读(151)  评论(0编辑  收藏  举报
交流群 编程书籍