编程语言:R x64 3.2.0
披露:这是Coursera提供的R Programming课程中的问题的一部分。我是编程语言的新手,并编写了以下代码作为任务的一部分:
根据给出的数据集中提供的信息,在这项任务中,我们必须找到30天死亡率最低的医院。
输入:状态名称(即数据集中提供的首字母缩写词)和"结果",这是疾病的名称(心脏病发作,心脏病)失败和肺炎)
输出:30天死亡率最低的医院名称(以.csv文件形式提供)
check <- function(state, outcome, data)
{
disease <- c("heart attack", "heart failure", "pneumonia")
if(is.element(state, data$State) != TRUE)
{
print("Invalid State")
}
else if(is.element(outcome, disease) != TRUE)
{
print("Invalid outcome")
}
}
best <- function(state, outcome)
{
dataset <- read.csv("outcome-of-care-measures.csv", colClasses = "character")
check(state, outcome, dataset)
if(outcome == 'heart attack')
{
temp <- dataset[dataset$State == state, c(2, 11)]
temp2 <- as.numeric(temp[[2]])
minimum <- min(temp2, na.rm = TRUE)
good_hospital <- temp[temp[[2]]== as.character(minimum), 1]
good_hospital
}
else if(outcome == 'heart failure')
{
temp <- dataset[dataset$State == state, c(2, 17)]
temp2 <- as.numeric(temp[[2]])
minimum <- min(temp2, na.rm = TRUE)
good_hospital <- temp[temp[[2]]== as.character(minimum), 1]
good_hospital
}
else if(outcome == 'pneumonia')
{
temp <- dataset[dataset$State == state, c(2, 23)]
temp2 <- as.numeric(temp[[2]])
minimum <- min(temp2, na.rm = TRUE)
good_hospital <- temp[temp[[2]]== as.character(minimum), 1]
good_hospital
}
}
当我提供最佳输入时(&#34; MD&#34;,&#34;心脏病发作&#34;),它会给我所需的输出,即&#34; JOHNS HOPKINS HOSPITAL,THE& #34;,但是当我给出最好的(&#34; AZ&#34;,&#34;心脏病发作&#34;)时,它给出了字符(0)。事实上,它也是最好的(&#34; TX&#34;,&#34;心脏病发作&#34;)。我不明白我哪里出错了。 (PS:我还没有完成这个程序。我还没有为那些存在平局的情况包含代码。但对于&#34; AZ&#34;和&#34; TX&#34;与&#34; ;心脏病发作&#34;,没有平局。我检查了数据集。)
如何中断函数执行?我想停止执行函数check()并在满足其中一个案例后停止执行程序。
提前致谢。 Dropbox链接到数据: https://www.dropbox.com/s/e7qysq8ns5sof27/ProgAssignment3-data.zip?dl=0
答案 0 :(得分:1)
有两项改进代码的建议:
1。您实际上并不需要单独的检查 -function。您可以将最佳功能中的check(state, outcome, dataset)
行替换为:
if(! state %in% dataset$State) stop("invalid state")
if(! outcome %in% c("heart attack", "heart failure", "pneumonia")) stop("invalid outcome")
当在函数中输入无效值时,这两行将停止执行该函数。
2. 您可以按如下方式简化if-else语句中的代码:
if(outcome == 'heart attack')
{
temp <- dataset[dataset$State == state, c(2, 11)]
temp <- temp[order(temp[,2],temp[,1]),]
return(as.character(temp[1,1]))
}
这部分首先获取所需的列,然后根据结果(例如心脏病发作)对其进行排序,并按字母顺序排列。最后一行返回最佳医院的名称。
新的 best -function给出了以下结果:
> best("TX", "heart attack")
[1] "CYPRESS FAIRBANKS MEDICAL CENTER"
> best("AZ", "heart attack")
[1] "MAYO CLINIC HOSPITAL"
> best("MD", "heart attack")
[1] "JOHNS HOPKINS HOSPITAL, THE"