Menu
CoddyTech

Hàm switch()

Thuộc phần Logic và luồng điều khiển trong hành trình R của Coddy. Bài học 47 trên 64.

switch(x, name = value, ...) so sánh chuỗi văn bản x với các tên rồi trả về giá trị tương ứng với tên khớp. Câu lệnh này thay thế một chuỗi dài các phép so sánh else if với cùng một biến:

size <- "m"
price <- switch(size, s = 2.5, m = 3, l = 3.5)
print(price)

Đầu ra:

[1] 3

Giá trị cuối cùng không có tên là giá trị mặc định, được dùng khi không có giá trị nào khớp. Nếu không có giá trị mặc định, switch() không khớp sẽ trả về NULL mà bạn không thấy:

day <- "fri"
print(switch(day, sat = "rest", sun = "rest", "work"))
print(is.null(switch("x", a = 1)))

Đầu ra:

[1] "work"
[1] TRUE

Giá trị rỗng sẽ chuyển sang giá trị tiếp theo, nên nhiều tên có thể dùng chung một kết quả:

kind <- function(day) switch(day, sat = , sun = "weekend", "weekday")
print(kind("sun"))
print(kind("tue"))

Đầu ra:

[1] "weekend"
[1] "weekday"

Giá trị có thể là toàn bộ khối code nằm trong dấu ngoặc nhọn, và kết quả là biểu thức cuối cùng được chạy trong khối:

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))

Đầu ra:

[1] 12
[1] 78.54
challenge icon

Thử thách

Dễ

Hoàn thiện calculate(a, op, b). op là một trong các giá trị plus, minus, times và over. Trả về kết quả áp dụng op cho a và b, hoặc unknown operation nếu op có giá trị khác. Chia cho 0 sẽ trả về cannot divide by zero.

Code được cung cấp đọc a, op và b (mỗi giá trị trên một dòng), rồi in ra giá trị được trả về.

Tự làm thử

calculate <- function(a, op, b) {
  # Viết code của bạn ở đây
  "unknown operation"
}

# Đoạn code đầu vào/đầu ra có sẵn: giữ nguyên
input <- suppressWarnings(readLines(file("stdin")))
cat(calculate(as.numeric(input[1]), input[2], as.numeric(input[3])), sep = "\n")
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Logic và luồng điều khiển

Tự luyện tập: Trình biên dịch R online