我在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切换语句引发错误