如果条件如下,我必须写重复的其他内容
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循环,但由于每个语句都必须被检查,所以效率会降低。
答案 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的表现比我的好(显而易见)。