Какие дополнительные меры предосторожности могут быть предприняты для предотвращения нежелательного направления в оператор if при вызове функции? - PullRequest
0 голосов
/ 13 октября 2019

В приведенном ниже коде при вызове функции best () вызывается оператор if с «неправильным условием, попробуйте еще раз», несмотря на то, что аргумент результата имеет сердечный приступ в качестве входных данных. Почему это так и что можно сделать, чтобы предотвратить такие случаи?

best("CA","heart attack")

best <- function(state, outcome) {
     #read file function


  dataTable  <- read.csv("outcome.csv", header = TRUE)
  choice <- state
  stateOfChoice <- dataTable[which(dataTable$state == choice),]

  if(outcome != "heart failure" || outcome != "heart attack" || outcome != "pneumonia"){
    print("wrong condition, try again")
    main()
  }

  else if (outcome == "heart attack"){
    #subsetting,selecting column of "Lower mortality estimate [xxxSpecified  Outcomexxx ]"  & the Hospital name attach to it
    heart_attack <- stateOfChoice[which.min(stateOfChoice$Lower.Mortality.Estimate...Hospital.30.Day.Death..Mortality..Rates.from.Heart.Attack),]
    hospital <- heart_attack$Hospital.Name
    return(hospital)
  }

  else if (outcome == "heart failure"){
    heart_failure <- stateOfChoice[which.min(stateOfChoice$Lower.Mortality.Estimate...Hospital.30.Day.Death..Mortality..Rates.from.Heart.Failure),]
    hospital <- heart_failure$Hospital.Name
    return(hospital)
  }

  else if (outcome == "pneumonia"){
    pneumonia <- stateOfChoice[which.min(stateOfChoice$Lower.Mortality.Estimate...Hospital.30.Day.Death..Mortality..Rates.from.Pneumonia),]
    hospital <- pneumonia$Hospital.Name
    return(hospital)
  }

}





main <- function() {
  print("Type Heart Attack, .....")

  outcome <- readline(prompt="Type your selection ")

  print("Select state")

  state <- readline(prompt ="Type in your selection")

  best(state,outcome)
}

main()

1 Ответ

2 голосов
/ 13 октября 2019

Если условия должны быть такими (если вы хотите использовать свое решение):

if(outcome != "heart failure" && outcome != "heart attack" && outcome != "pneumonia") {
   #do stuff
}

Тем не менее, лучшим вариантом будет:

if(! outcome %in% c("heart failure", "heart attack", "pneumonia"))

В качестве альтернативы - выможет структурировать ваши операторы if / else в следующем формате:

if()
else if()
else if()
else if()
else if()
...
else
  print("wrong condition, try again")
  main()

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...