Я сейчас занимаюсь курсом программирования Intro to R на Coursera, и у меня есть следующие сомнения в моем коде. Ниже приведен фрагмент кода.Разница между уникальными и уровнями и использование suppresswarnings
rankall <- function(outcome, num = "best") {
## Read outcome data
dat <- read.csv("outcome-of-care-measures.csv")
## Check that outcome are valid
outcomeValues <- c("heart attack", "heart failure", "pneumonia")
if(!(outcome %in% outcomeValues)){
stop("invalid outcome")
}
column <- if(outcome == "heart attack"){
11
}
else if(outcome == "heart failure"){
17
}
else if(outcome == "pneumonia") {
23
}
dat[, column] <- suppressWarnings(as.numeric(levels(dat[, column])[dat[, column]]))
dat[, 2] <- as.character(dat[, 2])
dat[, 11] <- as.numeric(dat[, 11]) # heart attack
dat[, 17] <- as.numeric(dat[, 17]) # heart failure
dat[, 23] <- as.numeric(dat[, 23]) # pneumonia
output <- vector()
states <- levels(dat[, 7])
## Return hospital name in that state with lowest 30-day death rate
## For each state, find the hospital of the given rank
for(i in 1:length(states)){
stateData <- dat[grep(states[i], dat$State), ]
outcomeData <- stateData[order(stateData[, column], stateData[, 2], na.last = NA), ]
hospital <- if(num == "best" || num == 1){
outcomeData[1, 2]
}
else if(num == "worst") {
outcomeData[nrow(outcomeData), 2]
}
else {
outcomeData[num, 2]
}
result <- append(result, c(hospital, states[i]))
}
## Return a data frame with the hospital names and the (abbreviated) state name
result <- as.data.frame(matrix(result, nrow = length(states), ncol = 2, byrow = TRUE))
colnames(result) <- c("Hospital names", "State")
result
}
В приведенном выше коде, если я заменю states <- levels(dat[, 7])
по states <- unique(dat[,7])
, я не получаю правильные выводы. Я не понимаю, почему.
А также, если я вниз
dat[, column] <- suppressWarnings(as.numeric(levels(dat[, column])[dat[, column]]))
Мой код не генерирует правильные выводы. Я попытался подтянуть документацию suppresswarnings, но либо я пропустил точку где-то, либо я не смог найти правильный ответ нигде.
Вы могли бы 'dput (head (dat))' пожалуйста? Это упростит выполнение вашего кода. –