重复的else if语句的快捷方式

时间:2018-04-05 15:38:36

标签: r if-statement

如果条件如下,我必须写重复的其他内容

  if (d_hand[1]==1){
    state=score(p_hand)-1
  } else if (d_hand[1]==2){
    state=19+score(p_hand)
  } else if (d_hand[1]==3){
    state=39+score(p_hand)
  } else if (d_hand[1]==4){
    state=59+score(p_hand)
  } else if (d_hand[1]==5){
    state=79+score(p_hand)
  } else if (d_hand[1]==6){
    state=99+score(p_hand)
  }

您知道是否可以更快/更快地写出来吗? 我想过做一个if循环,但由于每个语句都必须被检查,所以效率会降低。

4 个答案:

答案 0 :(得分:6)

根本没有ifelse

state <- score(p_hand) + 20 * d_hand[1] - 21

答案 1 :(得分:1)

也许是查找表。

add <- c(-1, 19, 39, 59, 79, 99)
state <- add[which(1:6 == d_hand[1])] + score(p_hand)

答案 2 :(得分:1)

您可以使用基座中的switch或dplyr case_when

library(dplyr)
state <- case_when(d_hand[1]==1 ~ {score(p_hand)-1}, 
          d_hand[1]==2 ~ 19+score(p_hand), 
          d_hand[1]==3 ~ 39+score(p_hand), 
          d_hand[1]==4 ~ 59+score(p_hand),
          d_hand[1]==5 ~ 79+score(p_hand), 
          d_hand[1]==6 ~ 99+score(p_hand)
)

答案 3 :(得分:1)

这个逻辑非常接近@Martin。

state <- score(p_hand) + 20*(d_hand[1]-1) - 1

修改 我曾想过会获得一些性能上的好处,但我错过了一点。我稍后会分享microbenchmark演出的详细信息。但@Martin的表现比我的好(显而易见)。