R中的switch语句帮助



我在R:中得到了以下代码

func.time <- function(n){
times <- c()
for(i in 1:n){
r <- 1 #x is the room the mouse is in
X <- 0 #time, starting at 0
while(r != 5){
if(r == 1){
    r <- sample(c(2,3),1) }
else if(r == 2){
    r <- sample(c(1,3), 1) }
else if(r == 3){
    r <- sample(c(1,2,4,5), 1) }
else if (r == 4){
    r <- sample(c(3,5), 1) }
 X <- X + 1
 }
 times <- c(X, times)
 }
 mean(times)
 }
 func.time(10000)

它工作得很好,但有人告诉我,使用switch()可以加快它的速度,因为我有很多if else语句,但我似乎无法让它发挥作用,任何帮助都会提前得到感谢。

编辑我试过这个:

func.time <- function(n) {
    times <- c() 
    for(i in 1:n) {
        r <- 1 #x is the room the mouse is in 
        X <- 0 #time, starting at 0 
        while(r != 5) { 
            switch(r, "1" = sample(c(2,3), 1),
                         "2" = sample(c(1,3), 1),
                         "3" = sample(c(1,2,4,5), 1),
                         "4" = sample(c(3,5))) 
            X <- X + 1 
        } 
        times <- c(X, times) 
    } 
    mean(times) 
} 
func.time(10000)

但这只是一个基本的尝试,我不确定我是否正确理解了switch()方法。

我认为Dominic的评估非常有用,但当我去检查编辑时,它被我认为是不正确的。所以我决定修复代码。当使用EXPR参数的数字参数时,您不使用item=value形式,而是只放入表达式中:

 func.time <- function(n){times <- c()
     for(i in 1:n){; r <- 1; X <- 0 
        while(r != 5){ 
            r <- switch(r, 
                  sample(c(2,3), 1) ,  # r=1
                  sample(c(1,3), 1) ,  # r=2
                  sample(c(1,2,4,5), 1), #r=3
                  sample(c(3,5), 1)  ) # r=4
            X <- X + 1 }
         times <- c(X, times) } 
         mean(times) } 
func.time(1000)
#[1] 7.999

关于如何将switch与EXPR的数字参数一起使用的另一个示例,请考虑我对这个问题的回答:具有不同输出的R切换语句引发错误

最新更新