R中的switch语句帮助

时间:2015-03-20 21:58:56

标签: r if-statement switch-statement

我在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()方法。

1 个答案:

答案 0 :(得分:1)

我虽然多米尼克的评估非常有用,但是当我去检查编辑时,它被认为是我认为不正确的基础。所以我决定修改代码。将数字参数用于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 switch statement with varying outputs throwing error