R 在调用函数时,可以采取哪些额外的预防措施来防止不必要的通道进入if语句?

R 在调用函数时,可以采取哪些额外的预防措施来防止不必要的通道进入if语句?,r,R,在下面的代码中,调用函数best()时,会触发带有“条件错误,重试”的if语句,尽管结果参数的输入为心脏病发作。为什么会出现这种情况?可以采取什么措施来防止这种情况的发生 best("CA","heart attack") best <- function(state, outcome) { #read file function dataTable <- read.csv("outcome.csv", header = TRUE) choice <-

在下面的代码中,调用函数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()
最佳(“CA”,“心脏病发作”)
最佳如果条件如下(如果您想使用您的解决方案):

然而,更好的办法是:

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()

希望这能有所帮助。

如果您想使用您的解决方案,If条件应该是这样的:

然而,更好的办法是:

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()

希望这有帮助。

您的更正很好地说明了OP版本错误的原因。但是从头开始写,一个更好的实现方法是
if(!outcome%in%c(“心力衰竭”、“心脏病发作”、“肺炎”))
谢谢您的反馈!我已经修改了我的回答,以纳入这一点。我也没有意识到你可以在R做这样的事情,今天学到了一些新的东西。干杯。你的更正很好地说明了OP版本错误的原因。但是从头开始写,一个更好的实现方法是
if(!outcome%in%c(“心力衰竭”、“心脏病发作”、“肺炎”))
谢谢您的反馈!我已经修改了我的回答,以纳入这一点。我也没有意识到你可以在R做这样的事情,今天学到了一些新的东西。干杯。几句评论-
read.csv
可能会比较慢。如果在
读取.csv
之前检查
结果
值是否存在错误条件,则程序将只执行慢速
读取.csv
步骤以获得良好的输入。如果你想变得有趣,而不是让
best
call
main
在输入错误时递归调用
best
抛出并使用
stop
出错。在
main()。如果在
读取.csv
之前检查
结果
值是否存在错误条件,则程序将只执行慢速
读取.csv
步骤以获得良好的输入。如果你想变得有趣,而不是让
best
call
main
在输入错误时递归调用
best
抛出并使用
stop
出错。在
main()。