R中的switch语句帮助

Posted

技术标签:

【中文标题】R中的switch语句帮助【英文标题】:switch statement help in R 【发布时间】:2015-03-20 21:58:56 【问题描述】:

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

【问题讨论】:

我推荐你阅读this或this或this 而且,不仅仅是“我似乎无法让它工作”,如果你展示你尝试过的东西,它会有所帮助。然后,我们可以解释您没有得到的部分并纠正误解,而不是解释整个事情。 嗨,我试过这个: func.time 我已将您的最后一条评论放在您的帖子中以简化“调试”;首先请注意,您需要引用数字才能将它们作为参数接受;您还需要用逗号分隔它们中的每一个;然后,while 循环是一个无限循环,因为您增加了 X 但 r 一直保持为 1。最后,您希望将 switch 语句的结果分配给一个变量,否则它不会起到任何作用。 所以现在我们有路过的审稿人拒绝有用的编辑。啊。 【参考方案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

【讨论】:

呵呵,我就像一个被树枝夹住的探险家,想要解开。但没有看到森林。现在我看到了;)

以上是关于R中的switch语句帮助的主要内容,如果未能解决你的问题,请参考以下文章

R语言switch语句语法实战:Switch语句用来处理嵌套的if else处理起来比较困难或者麻烦的条件判断问题

R中带有重复命令的Switch语句

咖啡脚本中的 switch case 语句

switch语句里不需要必须有break吗

switch语句 switch语句的相关知识

switch语句default前没有break,会输出default的信息吗?