R中多个ifelse的替代方案

MYa*_*208 3 if-statement r

我厌倦了多个ifelse陈述R.我知道有一个名称的功能,switch但如果以下示例,无法弄清楚如何使用.

set.seed(12345)
Y <- runif(n=100, min=0, max=50)

ifelse(
    test = Y < 5
  , yes  = "A"
  , no   =  ifelse(
         test = Y < 10
       , yes  = "B"
       , no = "C"
       )
    )
Run Code Online (Sandbox Code Playgroud)

产量


  [1] "C" "C" "C" "C" "C" "B" "C" "C" "C" "C" "A" "B" "C" "A" "C" "C" "C" "C"
 [19] "B" "C" "C" "C" "C" "C" "C" "C" "C" "C" "C" "C" "C" "A" "B" "C" "C" "C"
 [37] "C" "C" "C" "B" "C" "C" "C" "C" "C" "C" "A" "A" "A" "C" "C" "C" "C" "C"
 [55] "C" "C" "C" "A" "C" "C" "C" "C" "C" "C" "C" "C" "C" "B" "C" "C" "C" "C"
 [73] "C" "C" "A" "C" "C" "C" "C" "B" "C" "C" "A" "A" "B" "C" "C" "C" "C" "A"
 [91] "C" "C" "A" "C" "C" "C" "C" "C" "A" "C"
Run Code Online (Sandbox Code Playgroud)

任何帮助将受到高度赞赏.谢谢


编辑


如果我有以下代码.那么什么是更好的ifelse陈述选择.

set.seed(12345)
Y <- runif(n=100, min=0, max=50)

ifelse(
    test = Y < 5
  , yes  = -5
  , no   =  ifelse(
         test = Y < 10
       , yes  = 0
       , no = 5
       )
    )
Run Code Online (Sandbox Code Playgroud)

Jam*_*mes 8

switch不是真的意味着这样的事情,cut更好:

cut(Y,c(-Inf,5,10,Inf),labels=LETTERS[1:3],right=FALSE)
  [1] C C C C C B C C C C A B C A C C C C B C C C C C C C C C C C C A B C C C C
 [38] C C B C C C C C C A A A C C C C C C C C A C C C C C C C C C B C C C C C C
 [75] A C C C C B C C A A B C C C C A C C A C C C C C A C
Levels: A B C
Run Code Online (Sandbox Code Playgroud)