R 在调用函数时,可以采取哪些额外的预防措施来防止不必要的通道进入if语句?
在下面的代码中,调用函数best()时,会触发带有“条件错误,重试”的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("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
callmain
在输入错误时递归调用best
抛出并使用stop
出错。在main()。如果在读取.csv
之前检查结果
值是否存在错误条件,则程序将只执行慢速读取.csv
步骤以获得良好的输入。如果你想变得有趣,而不是让best
callmain
在输入错误时递归调用best
抛出并使用stop
出错。在main()。