链接到我的数据: https://d396qusza40orc.cloudfront.net/rprog%2Fdata%2FProgAssignment3-data.zip
说实话,这实际上不是我的剧本,我在某些来源上得到它并尝试将其分解然后根据我的知识重新编写它。
这是我的剧本
rankhospital<- function(state, outcome, num = "best"){
data<- read.csv("outcome-of-care-measures.csv", colClasses = "character")
outcomes<- c("heart attack", "heart failure", "pneumonia")
if ( state %in% data$State == FALSE){ stop("invalid state!")}
if (outcome %in% outcomes == FALSE){stop("invalid outcome")}
if(num != "best" && num != "worst" && num%%1 != 0){stop("invalid num")}
data<- data[, c(2, 7, 11, 17, 23)]
names(data)<- list("name", "state", "heart attack", "heart failure", "pneumonia")
data<- data[data$State == state & data[outcome] != "Not Available", ]
data[ , outcome] <- as.numeric(data[ , outcome ] )
max<- nrow(data)
if (num == "best"){num <- 1}
if (num == "worst"){num == as.numeric(max)}
if (num > max){ return(NA)}
data<- data[order(data[, 1]), ]
data<- data[order(data[,outcome]), ]
data[num, "name"]
}
该项目的要求是
num参数可以取值“best”,“worst”或整数 表示排名(较小的数字更好)。如果是这个号码 num给出的数量大于该州的医院数量, 那么函数应该返回NA。没有数据的医院 特定结果应排除在医院时 决定排名。
我的问题从脚本的这一部分开始
max<- nrow(data)
if (num == "best"){num <- 1}
if (num == "worst"){num == as.numeric(max)}
if (num > max){ return(NA)}
当我用
测试脚本时rankhospital("MD", "heart attack", "worst")
[1] NA
我得到了&#34; NA&#34;对于任何参数num的值,即使num&lt;最大,虽然我应该是医院的名称。 我确实试图改变 if(num> nrow(data)){return(NA)}而不是max但它仍然不起作用。请告诉我我的剧本中的错误,我很抱歉这个棘手的问题:)
答案 0 :(得分:0)
问题很可能是你在调用中使用num
作为函数变量,然后尝试在函数中重新定义它。
你的函数的最后一部分应如下所示:
if(num == "best"){temprow <- 1}
if(num == "worst"){temprow <- nrow(data)}
if(is.numeric(num) & num %in% 1:nrow(data)){temprow <- num}
if(is.numeric(num) & !(num %in% 1:nrow(data))){stop("ranking out of bounds!")}
data<- data[order(data[, 1]), ]
data<- data[order(data[,outcome]), ]
data[temprow, "name"]
删除max <- nrow(data)
行,这是不必要的混乱。