如何在R中使用switch()函数?

How to use switch() function in R?


问题

我想做的程序得到一个整数作为输入,输出是该整数对应的星期几(例如:输入:x <- 3L, 输出:星期二)。我被要求使用switch()函数,但我总是得到 "Error: unexpected ',' in " 。下面是我做的程序。谢谢你

x <- 5L
week_num2 <- switch(x,
           1L = "Sunday",
           2L = "Monday",
           3L = "Tuesday",
           4L = "Wednesday",
           5L = "Thursday",
           6L = "Friday",
           7L = "Saturday",
           stop("Invalid input")
)
week_num2
答案1

R中的 switch() 语句被解析为一个函数调用。 由于你不能有像 1L 这样的参数名,这就要求语句的写法不同。 你使用从1到7的所有值,所以你可以不写参数名:

week_num2 <- switch(x,
       "Sunday",
       "Monday",
       "Tuesday",
       "Wednesday",
       "Thursday",
       "Friday",
       "Saturday"
)

(把数字作为注释包括进去可能是个好主意,这样更容易阅读)。 这个表格不支持默认值;如果你不给它一个范围内的数字,它将返回 NULL

另一种使用方法(我推荐)是使用一个字符估值的表达式,例如

week_num2 <- switch(as.character(x),
       "1" = "Sunday",
       "2" = "Monday",
       "3" = "Tuesday",
       "4" = "Wednesday",
       "5" = "Thursday",
       "6" = "Friday",
       "7" = "Saturday",
       stop("Invalid input")
)

在这种形式下,一个未命名的参数被作为默认值使用。

相同问题还可以参考: How to use switch() function in R?