switch case:r中的几个等价case表达式

时间:2014-12-30 11:44:13

标签: r switch-statement expression case

在r编程中: 我想使用相同的方法来处理案例1和10,即当循环在第1轮然后再在10中时。同样适用于2和11。 有没有办法让几个案例表达式由同一个方法处理 对于k == 1以及之后也应该使用第一种情况,对于k == 2和之后的11,它应该使用第二种情况。上面的代码不起作用。

for(i in 1:x) {      

    switch(k,
             "1", "10"= { 
            correct <- test[21,1]
            current <- test[i-p,1]
            if(all(correct == current)){     
              answers[i-p,k] <- c(1)
            } else{
              answers[i-p,k] <- c(0)
            }
          },
      "2","11" ={
        correct <- test[21,2]
        current <- test[i,2]
        if(all(correct == current)){     
          answers[i,k] <- c(1)
        } else{
          answers[i,k] <- c(0)
        }
       }
}

只有一个案例表达式的相同代码有效:

for(i in 1:x) {      

    switch(k,
             "1" = { 
            correct <- test[21,1]
            current <- test[i-p,1]
            if(all(correct == current)){     
              answers[i-p,k] <- c(1)
            } else{
              answers[i-p,k] <- c(0)
            }
          },
      "2" ={
        correct <- test[21,2]
        current <- test[i,2]
        if(all(correct == current)){     
          answers[i,k] <- c(1)
        } else{
          answers[i,k] <- c(0)
        }
       }
}
在java中我们可以使用案例1:case 2来做到这一点。怎么在r? 我感谢您的帮助。或者我也可以复制代码但不想,如果我可以避免它。

2 个答案:

答案 0 :(得分:1)

我个人的选择是将k重新映射到重叠的情况。例如:

k<-1:20
kmatch<-(k-1)%%9 +1
# [1] 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2

然后将kmatch提供给您的case表达式

答案 1 :(得分:1)

语法与

一致
f = function(x)
    switch(x, "1"=, "10"="first", "11"="eleventh", "none")

注意每个命名表达式后面的等号,而不是默认值。

> f("1")
[1] "first"
> f("10")
[1] "first"
> f("11")
[1] "eleventh"
> f("12")
[1] "none"

这是详细记录在&#39;细节&#39;的第三段中。 ?switch的一部分。