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