R开关/具有先进条件的外壳

R开关/具有先进条件的外壳,r,switch-statement,R,Switch Statement,我有一系列嵌套的if..else语句,我想用case语句替换它们。现在R有一个简单的开关操作器,如下所示: switch (i) { case 1: // action 1 break; case 2: // action 2 break; case 3: // action 3 break; default: // action 4

我有一系列嵌套的
if..else
语句,我想用case语句替换它们。现在R有一个简单的开关操作器,如下所示:

switch (i) {

    case 1:
        // action 1
        break;
    case 2:
        // action 2
        break;
    case 3:
        // action 3
        break;
    default:
        // action 4
        break;
}
然而,我的案例是更复杂的条件,而不是简单的文字值

我需要像这样的东西

switch {

    case i %in% someList:
        // action 1
        break;
    case i %in% someOtherList:
        // action 2
        break;
    case i > 42:
        // action 3
        break;
    default:
        // action 4
        break;
}
有人知道这样的事情在R中是否可行吗?这将使我正在编写的代码更易于阅读

据我所知,这个问题在这里没有得到回答:


谢谢

也许这不是最好的解决方案,但您可以尝试使用嵌套的
ifelse
函数:

ifelse(i %in% someList, action1,
       ifelse(i %in% someOtherList, action2,
              ifelse(i > 42, action 3, default_action4)))

这是复制品吗?OP要求特定的
开关
情况不能映射到
开关
参数这是否是简单
if
的用例<代码>否则,如果。。。声明?@Docendiscimus当然这很有效,这也是我目前正在申请的。但在一定深度下,嵌套变得很难读取(更不用说维护了)。case语句将是一个更优雅的解决方案,然后您可能需要预处理您的条件,以便您可以使用开关,这或多或少是我目前正在做的事情。很快就会变得一团糟@Karl您是对的,尽管您可以省略对每个
ifelse
的缩进,因此它看起来更像一个
switch
语句