R中的排序:未找到对象

时间:2014-07-01 02:26:54

标签: r sorting

我一直在关注有关R数据帧的排序输出的教程:

https://www.statmethods.net/management/sorting.html

我遇到的问题是,当我按照教程中显示的方式使用命令时,下面的代码会吐出object not found。我不明白为什么它不能订购数据帧,但打印语句似乎工作正常。

以下是我正在使用的代码:

#hospital name is row 2
#state is row 7
#heart attack is row 11
#heart failure is row 17
#pneumonia is row 23
best <- function(state, outcome){
    colNum <- -1

    ##Semi hard coded :(
    if(outcome == "heart attack"){
        colNum <- 11
    } else if(outcome == "heart failure"){
        colNum <- 17
    } else if(outcome == "pneumonia"){
        colNum <- 23
    } else {
        stop("invalid outcome")
    }

    raw <-  read.csv("outcome-of-care-measures.csv", colClasses = "character")

    if(sum(raw$State == state) <= 0){
        stop("invalid state") 
    }

    rawRelevant <- raw[with(raw, raw[,colNum] != "Not Available" & 
         raw[,7] == state),c(2,colNum)]
    rawRelevant[,2] <- as.numeric(rawRelevant[,2])
    names(rawRelevant) <- c("Hospital", "Rate")
    print(rawRelevant$Hospital)
    print(rawRelevant$Rate)
    data <- rawRelevant[order(Rate,Hospital),]
}

示例输出:

> trial <- best("AK", "heart attack")
[1] "PROVIDENCE ALASKA MEDICAL CENTER" "MAT-SU REGIONAL MEDICAL CENTER"  
[3] "FAIRBANKS MEMORIAL HOSPITAL"      "ALASKA REGIONAL HOSPITAL"        
[5] "ALASKA NATIVE MEDICAL CENTER"    
[1] 13.4 17.7 15.5 14.5 15.7
Error in order(Rate, Hospital) : object 'Rate' not found 

1 个答案:

答案 0 :(得分:15)

在R中,您不能只将列名传递给函数,即使它们可能被想象为显然是指正在提取或重新排序的对象中的列。你需要使用&#34; [&#34;或&#34; $&#34;:

data <- rawRelevant[ order( rawRelevant$Rate, rawRelevant$Hospital), ]

使用非特定对象名称,例如&#34; data&#34;不鼓励,尤其是当它们也是R函数的名称时。可能出现的一种情况是,某些代码中的代码可能会attach调用rawRelevant,这会产生副作用,即将列名称提升为对象。但是attach引起了很多混乱,因为它不是用于编程,仅用于交互式使用,因此也不鼓励使用它。

请注意,加州大学洛杉矶分校的人使用attach(hsb2)。几年前,加州大学洛杉矶分校的统计网站建议反对R而不是SAS和SPSS。现在他们似乎已经出现了,但我认为他们完全没有参与该计划。&#34;