switch() 函数
本课属于 Coddy R 学习旅程的“逻辑与流程”单元。第 47 课,共 64 课。
switch(x, name = value, ...) 会将文本 x 与各个名称进行比较,并返回匹配名称对应的值。它可以替代针对同一个变量进行的一长串 else if 比较:
size <- "m"
price <- switch(size, s = 2.5, m = 3, l = 3.5)
print(price)输出:
[1] 3最后一个没有名称的值是默认值,在没有任何匹配项时使用。如果没有默认值,不匹配的 switch() 会悄无声息地返回 NULL:
day <- "fri"
print(switch(day, sat = "rest", sun = "rest", "work"))
print(is.null(switch("x", a = 1)))输出:
[1] "work"
[1] TRUE空值会继续匹配下一个值,因此多个名称可以对应同一个结果:
kind <- function(day) switch(day, sat = , sun = "weekend", "weekday")
print(kind("sun"))
print(kind("tue"))输出:
[1] "weekend"
[1] "weekday"这些值可以是用花括号括起来的完整代码块,结果是代码块中最后运行的表达式:
area <- function(shape, a, b = a) {
switch(shape,
square = a^2,
rect = a * b,
circle = {
r <- a / 2
round(pi * r^2, 2)
},
NA)
}
print(area("rect", 3, 4))
print(area("circle", 10))输出:
[1] 12
[1] 78.54挑战
简单完成 calculate(a, op, b)。op 是 plus、minus、times 和 over 之一。返回将它应用于 a 和 b 的结果;对于任何其他 op,返回 unknown operation。除以零时返回 cannot divide by zero。
提供的代码会读取 a、op 和 b(每行一个),并打印返回的值。
亲手试试
calculate <- function(a, op, b) {
# 在这里编写你的代码
"unknown operation"
}
# 提供的输入/输出代码:保持原样
input <- suppressWarnings(readLines(file("stdin")))
cat(calculate(as.numeric(input[1]), input[2], as.numeric(input[3])), sep = "\n")
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: R 在线编译器