我无法使用我的函数变量从列表中进行子集化。
rankhospital <- function(state,outcome,num = "best") {
#code here
e3<-dataframe(...,state.name,...)
if (num=="worst"){ return(worst(state,outcome))
}else if((num%in%b=="TRUE" & outcome=="heart attack")=="TRUE"){
sep<-split(e3,e3$state.name)
hosp.estado<-sep$state
hospital<-hosp.estado[num,1]
return(as.character(hospital))
我按状态分割数据框(这是我函数的变量)
但是hosp.estado<-sep$state
不起作用。我也试过as.data.frame.
该功能(rankhospital(“NY”....)返回一个字符(0)。
当我直接在代码中使用sep $“NY”提供sep $状态时,它完美地工作,所以我猜问题是我不能使用函数的变量来执行此操作。我对吗?我可以用什么呢?
谢谢!
答案 0 :(得分:1)
如果state
是您函数中的变量,则可以使用state
或sep[state]
引用sep[[state]]
给出的名称列。第一个生成一个数据框,其中一列基于state
的值命名。第二个产生一个未命名的向量。
df=data.frame(NY=rnorm(10),CA=rnorm(10), IL=rnorm(10))
state="NY"
df[state]
# NY
# 1 -0.79533912
# 2 -0.05487747
# 3 0.25014132
# 4 0.61824329
# 5 -0.17262350
# 6 -2.22390027
# 7 -1.26361438
# 8 0.35872890
# 9 -0.01104548
# 10 -0.94064916
df[[state]]
# [1] -0.79533912 -0.05487747 0.25014132 0.61824329 -0.17262350 -2.22390027 -1.26361438 0.35872890 -0.01104548 -0.94064916
class(df[state])
# [1] "data.frame"
class(df[[state]])
# [1] "numeric"
答案 1 :(得分:0)
好像你正试图让一个州的顶级医院。您不希望split
在这里(请参阅sep
的结果来了解我的意思)。相反,使用:
as.character(e3[e3$state.name==state, 1][num])
这有希望做你想要的。
答案 2 :(得分:0)
您需要sep[[state]]
而不是sep$state
才能从sep
list
中获取与您的函数的state
参数匹配的数据框。像这样:
e3 <- read.csv("https://raw.github.com/Hindol/data-analysis-coursera/master/HW3/hospital-data.csv")
state <- "WY"
num <- 1:5
sep<-split(e3,e3$State)
hosp.estado<-sep[[state]]
hospital<-hosp.estado[num,1]
as.character(hospital)
# [1] "530002" "530006" "530008" "530010" "530011"