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

switch case:r中的几个等价case表达式,r,switch-statement,expression,case,R,Switch Statement,Expression,Case,在r编程中: 我想用同样的方法来处理案例1和案例10,也就是说,当循环在第1轮,然后又在第10轮。2号和11号也一样。 有没有一种方法可以让同一个方法处理多个case表达式 对于k==1和之后的fo10,它应该使用第一种情况,对于k==2和之后的11,它应该使用第二种情况。上面的代码不起作用 for(i in 1:x) { switch(k, "1", "10"= { correct <- test[21,1]

在r编程中: 我想用同样的方法来处理案例1和案例10,也就是说,当循环在第1轮,然后又在第10轮。2号和11号也一样。 有没有一种方法可以让同一个方法处理多个case表达式 对于k==1和之后的fo10,它应该使用第一种情况,对于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)
        }
       }
}
(1:x中的i){code> 开关(k, "1", "10"= {
正确的我个人的选择是将您的
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

k语法与

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"

这在
?switch

的“详细信息”部分的第三段中有记录。您可以使用几个
if()
语句,其中的测试将是沿着
if(any)(在%c(“1”、“10”)中的情况%
。这似乎并没有解决OP的问题,即如何减少案例数量。@CarlWitthoft这与“在java中我们可以…”和其他编程语言中的
开关的行为以及第一个代码块的非功能性代码是一致的。也许是这样,但这不是重点。此外,we可能应该警告OP,他很幸运,
R
在执行
1==“1”
> f("1")
[1] "first"
> f("10")
[1] "first"
> f("11")
[1] "eleventh"
> f("12")
[1] "none"