未能为R中的if()设置正确的条件

未能为R中的if()设置正确的条件,r,R,链接到我的数据: 说实话,这实际上不是我的剧本,我从一些资料中得到了它,试着把它分解,然后,试着根据我的知识重写它 这是我的剧本 rankhospital<- function(state, outcome, num = "best"){ data<- read.csv("outcome-of-care-measures.csv", colClasses = "character") outcomes<- c("heart attack", "

链接到我的数据:

说实话,这实际上不是我的剧本,我从一些资料中得到了它,试着把它分解,然后,试着根据我的知识重写它

这是我的剧本

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的任何值,我都得到“NA”,即使num如果(num>nrow(data)){return(NA)}而不是max,但它仍然不工作。请告诉我脚本中的错误,我很抱歉问了这么长的问题:)

问题很可能是您在调用中使用了
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"]

if(num==“best”){temprow
num==as.numeric(max)
是一个条件,
num谢谢,当我更改为num时,我只是按照你说的做,但仍然得到NA作为结果请读取数据并复制
(dput(head(data[,c(2,7,11,17,23)])的输出)
进入你的问题。我不喜欢从未知位置下载.zip文件。
rankhospital("MD", "heart attack", "worst")
[1] NA
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"]