This report was automatically generated with the R package knitr (version 1.0).

rankall <- function(outcome, num = "best") {

  ## Read outcome data
  outcomeCM<-read.csv("outcome-of-care-measures.csv",colClasses = "character") # if not using "colClass" option, death rate will be factor class and as.numberic() will get wrong data
  stateName<-outcomeCM[,7] # the State column (no NAs)
  ha_dr<-suppressWarnings(as.numeric(outcomeCM[,11]))    # the heart attack death rate column (with NA)
  hf_dr<-suppressWarnings(as.numeric(outcomeCM[,17]))    # the heart failure death rate column (with NA)
  pn_dr<-suppressWarnings(as.numeric(outcomeCM[,23]))    # the Pneumonia death rate column (with NA)

  #   ha_dr<-as.numeric(outcomeCM[,11][!outcomeCM[,11]=="Not Available"])    # the heart attack death rate column (without NA)
  #   hf_dr<-as.numeric(outcomeCM[,17][!outcomeCM[,17]=="Not Available"])    # the heart failure death rate column (with NA)
  #   pn_dr<-as.numeric(outcomeCM[,23][!outcomeCM[,23]=="Not Available"])    # the Pneumonia death rate column (with NA)

  stateNameUni<-unique(stateName[!is.na(stateName)])
  state.Name.Order <- stateNameUni[order(stateNameUni)]
  const <- list(outcome=c("heart attack","heart failure","pneumonia"),state=state.Name.Order,dr.w.na=list(heart.attack=ha_dr,heart.failure=hf_dr,pneumonia=pn_dr))


  ## Check that state and outcome are valid
#   if(!is.element(state,const$state)){
#     #return(sprintf("Error in best(%s, %s) : invalid state",state,outcome))
#     stop("invalid state")
#   }
  if(!is.element(outcome,const$outcome)){
    #return(sprintf("Error in best(%s, %s) : invalid outcome",state,outcome))
    stop("invalid outcome")
  }
  ## need a function get (the hostpital counts ) by state and outcome
  hostpitalNumber<-function(state,outcome){
    if(outcome=="heart attack"){
      dr=ha_dr
      orderHospitalAll<-outcomeCM[order(dr,outcomeCM[,2]),]
      orderHosiptalValid<-orderHospitalAll[orderHospitalAll[,11]!="Not Available",] # with no NA in death rate column
    }
    if(outcome=="heart failure"){
      dr=hf_dr
      orderHospitalAll<-outcomeCM[order(dr,outcomeCM[,2]),]
      orderHosiptalValid<-orderHospitalAll[orderHospitalAll[,17]!="Not Available",] # with no NA in death rate column

    }
    if(outcome=="pneumonia"){
      dr=pn_dr
      orderHospitalAll<-outcomeCM[order(dr,outcomeCM[,2]),]
      orderHosiptalValid<-orderHospitalAll[orderHospitalAll[,23]!="Not Available",] # with no NA in death rate column
    }
    length(orderHosiptalValid[orderHosiptalValid$State==state,][,2])
  }

  rankhospitalLite <- function(state, outcome, num = "best") {
    if(outcome=="heart attack"){
      orderHositalAll<-outcomeCM[order(ha_dr,outcomeCM[,2]),]  # 
      if (num=="best"){num=1}
      if (num=="worst"){num<-hostpitalNumber(state,outcome)}
      if (num> hostpitalNumber(state,outcome)){num=""}
      orderHositalAll[orderHositalAll$State==state,][,2][num]
    }
    else if(outcome=="heart failure"){
      orderHositalAll<-outcomeCM[order(hf_dr,outcomeCM[,2]),]
      if (num=="best"){num=1}
      if (num=="worst"){num<-hostpitalNumber(state,outcome)}
      if (num> hostpitalNumber(state,outcome)){num=""}
      orderHositalAll[orderHositalAll$State==state,][,2][num]
    }
    else if(outcome=="pneumonia"){
      orderHositalAll<-outcomeCM[order(pn_dr,outcomeCM[,2]),]
      if (num=="best"){num=1}
      if (num=="worst"){num<-hostpitalNumber(state,outcome)}
      if (num> hostpitalNumber(state,outcome)){num=""}
      orderHositalAll[orderHositalAll$State==state,][,2][num]
    }
  }


  ## For each state, find the hospital of the given rank
  ## Return a data frame with the hospital names and the
  ## (abbreviated) state name
  resu <- data.frame(hospital="",state=const$state)
  resu$hospital <- sapply(const$state,rankhospitalLite,outcome,num)
  return(resu)



}

The R session information (including the OS info, R version and all packages used):

sessionInfo()
## R version 2.15.2 (2012-10-26)
## Platform: x86_64-w64-mingw32/x64 (64-bit)
## 
## locale:
## [1] LC_COLLATE=Chinese (Simplified)_People's Republic of China.936 
## [2] LC_CTYPE=Chinese (Simplified)_People's Republic of China.936   
## [3] LC_MONETARY=Chinese (Simplified)_People's Republic of China.936
## [4] LC_NUMERIC=C                                                   
## [5] LC_TIME=Chinese (Simplified)_People's Republic of China.936    
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## 
## loaded via a namespace (and not attached):
## [1] digest_0.6.0   evaluate_0.4.3 formatR_0.7    knitr_1.0     
## [5] stringr_0.6.2  tools_2.15.2
Sys.time()
## [1] "2013-01-22 16:26:34 CST"