我一直在关注有关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),]
}
Run Code Online (Sandbox Code Playgroud)
样本输出:
> 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
Run Code Online (Sandbox Code Playgroud)
42-*_*42- 15
在R中,您不能将列名称传递给函数,即使它们可能被想象为显然是指正在提取或重新排序的对象中的列.你需要使用"["或"$":
data <- rawRelevant[ order( rawRelevant$Rate, rawRelevant$Hospital), ]
Run Code Online (Sandbox Code Playgroud)
不鼓励使用非特定对象名称,如"数据",尤其是当它们也是R函数的名称时.可能出现的一种情况是,上涨的某人的代码可能有过的attach呼叫rawRelevant,而那可能会出现促进了列名对象的副作用.但是attach由于它不适合编程,仅用于交互式使用,因此引起很多混淆,因此也不鼓励使用它.
请注意,加州大学洛杉矶分校的人使用attach(hsb2).几年前,加州大学洛杉矶分校的统计网站建议反对R而不是SAS和SPSS.现在他们似乎已经出现了,但我认为他们并没有完全"参与该计划".