我一直在关注有关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
答案 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;