#r #if-statement
#r #if-оператор
Вопрос:
Я создал набор данных с текущими различиями в пробеге по командам для сезона MLB 2019-2020. Я пытаюсь предсказать результат (если вы должны сделать ставку, и на какую команду вы должны сделать ставку). Это очень простая функция, но у меня возникают проблемы с утверждениями else if, противоречащими самим себе.
Обратите внимание в приведенном ниже коде, что оператор:
if(x > y)
противоречит с:
if(x > 2*y)
Когда я вызываю функцию с x больше, чем в два раза y, она по-прежнему возвращает «BETX», а не желаемое «LOCKX»
Я попытаюсь сделать то же самое для «LOCKY», но сначала я хотел бы разобраться с этой проблемой.
Заранее благодарю вас!
bets <- function(x, y){
if(x > y){
return("BETX")
}
else if(x == y){
return("NO BET")
}
else if(x > 2*y){
return("LOCKX")
}else{
return("BETY")
}
}
bets(cubsdiff, diamondbacksdiff) ## BET CUBS
bets(yankeesdiff, royalsdiff) ## BET YANKS
Ответ №1:
Существует несколько способов решения этой проблемы.
x > 2*y
сначала спросите, если
if(x > 2*y){
return("LOCKX")
}
else if(x > y){
return("BETX")
}
...
спросите, находится ли x > 2*y
внутри x>y
блока
if(x > y){
if(x > 2*y){
return("LOCKX")
} else {
return("BETX")
}
}
...
или замените ваш x > y
оператор составным оператором
if (x > y amp; x <= 2*y){
return("BETX")
}
...
Ответ №2:
Ну, если, скажем, x = 50 и y = 5, тогда у вас есть x> y и x> 2 * y, так что противоречия нет.
Но вы могли бы добавить следующее к своему первому if
условию:
if (x > y amp; x <= 2*y){
return("BETX")
}
Таким образом, вы возвращаете BETX только в том случае, если x больше, чем y, но не слишком большой (т. Е. Меньше 2 * y).
В противном случае вы могли бы сначала проверить, если x> 2y, а затем проверить, если x> y.
bets <- function(x, y){
if(x > 2y){
return("LOCKX")
}
else if(x == y){
return("NO BET")
}
else if(x > y){
return("BETX")
}else{
return("BETY")
}
}